home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-11-25 | 115.5 KB | 2,624 lines |
-
- 0. INHALT:
- ============
-
- I. Allgemeine Hinweise
-
- 1. Übersetzung der Library mit Pure C, GNU-C und Lattice C
- a. Pure C
- b. GNU-C/Lattice C
- 2. Nutzung der Library mit Pure C, GNU-C und Lattice C
-
- II. Neue Möglichkeiten in Eingabefeldern
-
- III. erweiterte Objekt-Typen sowie Resource-Aufbau
-
- 1. Debugging
- 2. Highbyte des Objekt-Typs
-
- IV. Globale Variablen der Library
-
- V. Funktionen, Strukturen und Konstanten der Library
-
- 1. Routinen zur Verwaltung des Cookie-Jars
- 2. Routinen zur Verwaltung des Environments
- 3. Erweiterte Objekt-Routinen (u.a. kompatibel zum PC-GEM 2.0)
- 4. Erweiterte Rechteck-Routinen (u.a. kompatibel zum PC-GEM 2.0)
- 5. VDI-Attribut- und Clipping-Funktionen
- 6. Erweiterte Scrap-Directory-Routinen
- 7. Erweiterte Grafik-Routinen
- 8. Menü-Funktionen
- 9. Dialog-Optionen und -optik setzen
- 10. Bibliothek (AES,VDI) sowie Resource (de-) initialisieren
- 11. Resource- und Objekt-Initialisierung
- 12. Ereignis-Auswertung
- 13. Dialog-Funktionen
- 14. Fenster-Funktionen
- 15. Popup-Funktion
- 16. XAcc-2- und AV-Protokoll-Funktionen
- 17. Drag & Drop-Funktionen
- 18. Auskunftsfunktionen
- 19. Datei-/Pfadfunktionen
- 20. Verschiedene Funktionen
- 21. Definitionen häufig benötigter (Protokoll-) Konstanten
-
-
- I. Allgemeine Hinweise:
- =========================
-
- 1. Übersetzung der Library mit Pure C, GNU-C und Lattice C
- -------------------------------------------------------
-
- WICHTIG:
- Bei der Übersetzung der Library darf keine Stack-Überprüfung aktiviert
- sein, da einige Library-Funktionen (z.B. benutzerdefinierte Objekte) vom
- AES aufgerufen werden und somit den AES-Stack verwenden.
-
- Light-Version:
- --------------
- Wird die Library mit definiertem Konstanten-Makro 'SMALL_EGEM' (s.a.
- Projekt-Datei 'EGEMLGHT.PRJ' bzw. 'EGEMMNTL.PRJ') übersetzt, so sind
- keine Eingaben in Dialogen (Edit-Felder) möglich und die Funktionen
- ob_clear_edit() sowie ascii_box() stehen nicht zur Verfügung. Außer-
- dem sind bei den erweiterten Objekttypen weniger Images vorhanden.
- Sinn und Zweck ist, daß dadurch der Overhead durch die Library geringer
- wird (u.a. bei Programmen, die z.B. nur erweiterte Alertboxen nutzen)
-
- a. Pure C
-
- EnhancedGEM läßt sich sowohl mit den Pure-C-Libraries als auch mit den
- MiNT-Libraries ab Patchlevel 30 compilieren.
- Hierzu muß jedoch im Header-File AESBIND.H der MiNT-Libraries die Zeile
-
- __EXTERN int evnt_timer __PROTO((unsigned long Interval));
-
- in
-
- __EXTERN int evnt_timer __PROTO((int Int_locount,int Int_hicount));
-
- geändert werden.
- Weiterhin muß das Makro __MINT_LIB__ definiert werden (s. E_GEMMNT.PRJ)
-
- b. GNU-C/Lattice C
-
- Ebenfalls läßt sich EnhancedGEM mit GNU-C und Lattice C übersetzen,
- wobei allerdings die MiNT-Library sowie die entsprechenden Makefiles
- (Makefile.GCC bzw. Makefile.LCC) benutzt werden müssen. Eventuell auf-
- tretende Warnungen bei der Übersetzung sind (hoffentlich) bedeutungslos.
-
- 2. Nutzung der Library mit Pure C, GNU-C und Lattice C
- -------------------------------------------------------
-
- a. Wurde EnhancedGEM mit Hilfe der MiNT-Libraries übersetzt, so MÜSSEN
- die MiNT-Libraries und die dazugehörigen Header-Dateien auch benutzt wer-
- den. Ansonsten sind die Reaktionen nicht vorhersehbar, aber höchstwahr-
- scheinlich resultieren daraus Fehlfunktionen (außer evtl. bei GNU-C).
-
- b. Die Funktionen evnt_multi, EvntMulti (Pure C) sowie evnt_mesag des
- AES sollten nicht mehr benutzt werden! Stattdessen sollte immer die
- Funktion Event_Multi benutzt werden! Weitere Details zur Ereignisver-
- arbeitung s. Funktionen Event_Multi() und Event_Handler().
-
- c. Alle internen, modulübergreifenden globalen Variablen und Funktionen
- der Library beginnen mit einem Unterstrich '_', so daß es zu keinen
- Überschneidungen kommen sollte.
-
- II. Neue Möglichkeiten in Eingabefeldern:
- ===========================================
-
- - zusätzliche Gültigkeitsmasken:
- 'c','C': Ziffern "0-9", Komma ".,", Rechenzeichen "+-*/^",
- Klammern "(){}[]"
- 'l','L': LED-Ziffern "0-9"
- '<Ziffer>': Ziffer='0'-'9', alle Ziffern von '0' bis <Ziffer>, z.B.
- '1': Binärziffern '01'
- '7': Oktalziffernn '01234567'
- '9': Dezimalziffern '0123456789'
- 'h','H': Hexadezimalziffern "0-9A-F",
- Umwandlung in Klein/Großbuchstaben
- 'u','U': ASCII 32-127, Umwandlung in Klein-/Großbuchstaben
- 'v','V': ASCII 32-255, Umwandlung in Klein-/Großbuchstaben
- 'w','W': ASCII 32-127
- 'y','Y': ASCII 32-255
-
- - kleiner/großer System-Font können in Eingabefeldern benutzt
- werden. Unterstützt das AES auch nicht-proportionale GDOS-Fonts,
- so können diese ebenfalls in Eingabefeldern verwendet werden.
-
- - ein Eingabefeld darf maximal MAX_EDIT-Zeichen lang werden (ansonsten
- muß die Konstante bei Bedarf in der Datei 'E_GEM.H' geändert und die
- Library neu übersetzt werden)
-
- - Eingabefelder dürfen einen Klammeraffen '@' am Anfang besitzen
-
- III. erweiterte Objekt-Typen sowie Resource-Aufbau:
- =====================================================
-
- 1. Debugging:
- -------------
-
- Wird die Library mit definiertem Konstanten-Makro 'DEBUG' (s.a.
- Projekt-Datei 'E_GEM.PRJ' bzw. 'E_GEMMNT.PRJ') übersetzt, so gibt die
- Library Fehlermeldungen (Alert-Boxen) aus, wenn Fehler im Resource-
- Aufbau gefunden wurden (z.B. doppelt vergebene Hotkeys, mehr als ein
- Help-/Undo-/Default-Button usw.). Dabei werden die Art des Fehlers und
- die Nummer des fehlerhaften Objekts ausgegeben.
-
- 2. Highbyte des Objekt-Typs (s.a. STARTUP.RSC):
- -----------------------------------------------
-
- TriState-Checkboxen:
- --------------------
-
- Ist das Flag TOUCHEXIT bei einer Checkbox gesetzt, so kann die
- Checkbox noch einen dritten Zustand (neben selektiert und nicht
- selektiert) annehmen, bei dem das Innere der Checkbox mit einem
- grauen Muster gezeichnet wird. In diesem Zustand ist der Status
- CHECKED gesetzt.
-
- #define CHECKBOX 1 /* Check-Box */
- #define HEADER 2 /* Überschrift */
- #define RADIO 3 /* Radio-Button */
- #define UNDERLINE 4 /* Unterstrich */
- #define HOTKEY 5 /* Hotkey-Objekt */
- #define CHKHOTKEY 6 /* Check-Box mit Hotkey */
- #define RBHOTKEY 7 /* Radio-Button mit Hotkey */
- #define INDHOTKEY 8 /* Hotkey-Objekt einer Check-Box oder
- eines Radio-Buttons */
- #define FLYDIAL 9 /* Flugecke */
- #define TXTDEFAULT 10 /* Status des DEFAULT-Objekts ist von
- diesem Text-Objekt abhängig */
- #define USERFLY 11 /* beliebiges Flugobjekt */
- #define HELP_BTN 12 /* Help-Button */
-
- GDOS-Fonts:
- -----------
-
- Der erweiterte Objekttyp 'ATTR_TEXT' unterstützt auch die Ausgabe
- von beliebigen, u.a. proportinalen GDOS-Fonts unabhängig vom
- AES! Dabei müssen die Felder 'te_fontid', 'te_fontsize' der
- TEDINFO-Struktur auf die ID und die Größe in Punkt des Fonts ge-
- setzt werden. Außerdem muß das Feld 'te_font' auf eine der fol-
- genden Konstanten gesetzt werden:
-
- #define GDOS_PROP 0 /* Speedo GDOS font */
- #define GDOS_MONO 1 /* Speedo GDOS font, monospace */
- #define GDOS_BITM 2 /* GDOS bit map font */
-
- Nach dem Initialisieren der Objekte durch fix_objects(), rsrc_calc()
- oder rsrc_init() ist der Objekttyp auf 'G_XTEXT' gesetzt und die
- Variable 'ob_spec' der OBJECT-Struktur zeigt auf einen benutzer-
- definierten Block USERBLK, dessen Parameter 'ub_parm' auf folgende
- Struktur zeigt, welche mit den Werten aus der Resource-Datei initia-
- lisiert ist (ein evtl. vorhandenes EDITABLE-Flag wird gelöscht!):
-
- X_TEXT-Struktur:
- ----------------
-
- typedef struct
- {
- /* Zeiger auf Text (sollte nur mit ob_get_text()/ob_set_text()
- gesetzt oder ermittelt werden) */
- char *string;
-
- /* Font-ID, -höhe (<0: in Punkt, >0: in Pixel) */
- int font_id,font_size;
-
- /* Farbe (0-15, kann nachträglich auf beliebige VDI-Farbe
- gesetzt werden) */
- int color;
-
- /* Zentrierung des Textes (TE_LEFT,TE_CNTR,TE_RIGHT) */
- int center;
-
- /* Schreibmodus (MD_REPLACE,MD_TRANS,MD_XOR,MD_ERASE) */
- int mode;
-
- /* Alle weiteren Variablen dieser Struktur sind für interne
- Zwecke reserviert! */
- } X_TEXT;
-
- #define ATTR_TEXT 13 /* Text mit Attributen */
-
- #define CYCLE_BUTTON 14 /* Cycle-Button */
- #define ARROW_LEFT 15 /* Pfeil links */
- #define ARROW_RIGHT 16 /* Pfeil rechts */
- #define ARROW_UP 17 /* Pfeil hoch */
- #define ARROW_DOWN 18 /* Pfeil runter */
- #define UNDO_BTN 19 /* Undo-Button */
-
- Jedem Objekt können die erweiterten Typen UNDO_BTN, HELP_BTN, HEADER
- und USERFLY zugeordnet werden. Bei ATTR_TEXT sowie TXTDEFAULT muß
- es sich um ein Text-Objekt (auch G_STRING), bei UNDERLINE sollte es
- sich um den Typ G_BOX handeln. Alle anderen erweiterten Typen
- sollten (müssen aber nicht) dem Typ G_BOXCHAR zugeordnet werden.
-
- #define G_UNMODAL 0x4000 /* unmodales Objekt */
- #define G_MODAL 0x8000 /* modales Objekt */
-
- Zusätzlich können alle (!) Objekte durch Setzen von Bit 14 (G_UNMODAL)
- bzw. Bit 15 (G_MODAL) im Objekt-Typ (erweiterter Objekttyp mit 64 bzw.
- 128 verodern) zu einem unmodalen oder modalen Objekt deklariert werden,
- welches nur in unmodalen bzw. modalen Dialogen erscheint.
-
- WICHTIG:
- --------
- Will man den Objekttyp ermitteln, so sollte man die Variable 'ob_type'
- der OBJECT-Struktur mit der Konstante G_TYPE maskieren!
-
- Nach dem Initialisieren der Resource durch die Library werden der
- Objekttyp und teilweise das obere Byte des Objektstatus der erweiterten
- Objekte verändert. Ebenso zeigt 'ob_spec' meistens auf den USERBLK des
- Objekts. Daher sollte man auf diese Variablen nicht mehr zugreifen,
- sofern die Änderungen nicht dokumentiert sind (wie z.B. bei ATTR_TEXT)
-
- Weitere (Kombinations-) Möglichkeiten s.a. Beispielprogramm sowie
- Startup-Resource (STARTUP.RSC).
-
- WICHTIG:
- --------
- Werden die Funktionen rsrc_calc() oder rsrc_init() mit der Größe des
- Entwurfsfonts aufgerufen, so SOLLTEN nur Pull-Down-Menüs G_TITLE-
- Objekte enthalten. Ansonsten wird der Dialog normal vom AES an die
- Größe des System-Fonts skaliert.
-
- IV. Globale Variablen der Library:
- ====================================
-
- int _app;
- -> Programm wurde als Applikation (_app!=0) oder Accessory (_app==0)
- gestartet
-
- int ap_id:
- -> Applikationsidentifikation (Rückgabewert von appl_init())
- oder negativer Wert, wenn AES-Initialisierung nicht erfolg-
- reich war
-
- int menu_id:
- -> Nummer des Eintrags im Accessory-Menü oder negativer Wert
-
- int grhandle:
- -> Handle der AES-Workstation (Rückgabewert von graf_handle)
-
- int x_handle:
- -> Handle der Library-Workstation
-
- int gr_cw,gr_ch:
- -> Breite/Höhe des System-Zeichensatzes (IBM) in Pixel
-
- int gr_bw,gr_bh:
- -> Breite/Höhe eines Rechtecks, das jedes einzelne Zeichen
- des System-Zeichensatzes (IBM) vollständig umgibt.
-
- int gr_sw,gr_sh:
- -> Breite/Höhe des kleinen System-Zeichensatzes (SMALL) in Pixel
-
- int ibm_font,ibm_font_id;
- -> Höhe des System-Zeichensatzes (IBM) in Punkt sowie Font-ID
-
- int small_font,small_font_id;
- -> Höhe des kleinen System-Zeichensatzes (SMALL) in Punkt
- sowie Font-ID
-
- int fonts_loaded;
- -> GDOS-Fonts wurden geladen (werden die GDOS-Fonts von der
- Anwendung geladen, so muß diese Variable auf einen Wert un-
- gleich Null gesetzt oder die Fonts selbständig entfernt werden)
-
- int max_w,max_h:
- -> Breite/Höhe des Bildschirms in Pixel
-
- int planes, colors:
- -> Anzahl der Farbebenen sowie gleichzeitig darstellbaren
- Farben
-
- int colors_available;
- -> Anzahl der Farbabstufungen der Farbpalette
- (2: monochrom, 0: mehr als 32767 Farben)
-
- MFDB *screen;
- -> Memory Form Definition Block des Bildschirms
-
- GRECT desk;
- VRECT clip;
- -> Ausmaße des Desktop-Fensters als GRECT bzw. VRECT
-
- int aes_version:
- -> AES-Versionsnummer
-
- int magx:
- -> Versionsnummer von MagiC ab Version 2.00
-
- int winx:
- -> Versionsnummer von Winx ab Version 2.10
-
- int mint:
- -> MiNT-Versionsnummer
-
- int multi:
- -> AES-Multitasking-Betriebssystem vorhanden
-
- int search:
- -> appl_search()-Funktion vorhanden
-
- int AvServer;
- -> Applikations-ID des AV-Protokoll-Servers oder negativer Wert
-
- int menu_available;
- -> Anwendung darf eigene Drop-Down-Menüleiste anmelden
- (menu_available!=0)
-
- OBJECT *iconified;
- -> Zeiger auf Objektbaum, der für die Darstellung von ikonifizierten
- Fenstern benutzt wird (ansonsten weißer Hintergrund des Fensters,
- falls Zeiger nicht gesetzt wurde)
-
- V. Funktionen, Strukturen und Konstanten der Library:
- =======================================================
-
- 1. Routinen zur Verwaltung des Cookie-Jars
- ---------------------------------------
-
- COOKIE-Struktur:
- ----------------
- typedef struct
- {
- long cookie_id; /* ID des Cookies */
- long cookie_value; /* Wert des Cookies */
- } COOKIE;
-
- void create_cookie(COOKIE *cookie,long id,long value);
- -> Cookie 'cookie' wird mit der Identifikation 'id' und
- dem Wert 'value' initialisiert
-
- boolean new_cookie(COOKIE *cookie);
- -> Cookie 'cookie' in Cookie-Jar einfügen (Rückgabewert
- gleich FALSE, falls Cookie-Jar nicht existiert oder
- keine freien Einträge mehr vorhanden sind)
-
- boolean get_cookie(long id,long *value);
- -> Cookie mit der Identifikation 'id' im Cookie-Jar suchen
- und Wert gegebenenfalls in der Variable '*value' sichern
- (sofern value!=NULL)
- -> Rückgabewert ungleich FALSE, wenn Cookie gefunden wurde
-
- void remove_cookie(long id);
- -> Cookie mit der Identifikation 'id' aus dem Cookie-Jar
- entfernen
-
- void move_cookiejar(long *new_cookie_jar,long size);
- -> neuen Cookie-Jar 'new_cookie_jar' mit Platz für 'size'
- Einträge anlegen und alten Cookie-Jar gegebenfalls
- kopieren
- -> neuer Cookie-Jar muß mindestens so viele Einträge wie
- der alte Cookie-Jar haben
-
- long cookie_size(void);
- -> Anzahl der maximalen Einträge im Cookie-Jar ermitteln
-
- 2. Routinen zur Verwaltung des Environments
- ----------------------------------------
-
- char *getenv(const char *entry);
- -> Variable 'entry' im Environment suchen und im Erfolgsfall
- Zeiger auf Wert der Variable zurückgeben (ansonsten NULL)
-
- int putenv(const char *entry);
- -> Zeichenkette 'entry' ins Environment einfügen
- -> Rückgabewert ungleich Null im Erfolgsfall
-
- 3. Erweiterte Objekt-Routinen (u.a. kompatibel zum PC-GEM 2.0)
- -----------------------------------------------------------
-
- void ob_dostate(OBJECT *tree,int object,int masc);
- -> einzelne Bits 'masc' des Objektstatus des Objekts 'object'
- im Baum 'tree' durch Veroderung setzen
-
- void ob_undostate(OBJECT *tree,int object,int masc);
- -> einzelne Bits 'masc' des Objektstatus des Objekts 'object'
- im Baum 'tree' durch Maskierung löschen
-
- int ob_isstate(OBJECT *tree,int object,int masc);
- -> Bits 'masc' im Objektstatus des Objekts 'object' im Baum
- 'tree' testen
- -> Rückgabewert:
- TRUE (1): alle Bits gesetzt
- FALSE (0): Bits (teilweise) nicht gesetzt
-
- void ob_setstate(OBJECT *tree,int object,int state);
- -> Objektstatus des Objekts 'object' im Baum 'tree' auf den
- Wert 'state' setzen
-
- void ob_select(DIAINFO *info,OBJECT *tree,int object,int select,
- int draw)
- -> Objekt 'object' im Baum 'tree' in Abhängigkeit des
- Parameters 'select' (de-) selektieren und evtl. neuzeichnen
- (draw!=0). Gehört der Objektbaum zu einem geöffneten Dialog,
- so sollte ein Zeiger auf die DIAINFO-Struktur des Dialogs
- übergeben werden, damit gegebenenfalls der Ausgabebereich
- korrekt berechnet werden kann.
- -> Bedeutung des Parameters 'select':
-
- /* Status setzen (=selektieren) */
- #define SET_STATE 1
-
- /* Status löschen (=deselektieren) */
- #define CLEAR_STATE 0
-
- /* Status invertieren */
- #define FLIP_STATE -1
-
- void ob_disable(DIAINFO *info,OBJECT *tree,int object,int disable,
- int draw)
- -> Objekt 'object' im Baum 'tree' in Abhängigkeit des
- Parameters 'disable' dis-/enablen und evtl. neuzeichnen
- (draw!=0). Parameter und Aufruf s. Funktion ob_select()
-
- void ob_doflag(OBJECT *tree,int object,int masc);
- -> einzelne Bits 'masc' der Objektflags des Objekts 'object'
- im Baum 'tree' durch Veroderung setzen
-
- void ob_undoflag(OBJECT *tree,int object,int masc);
- -> einzelne Bits 'masc' der Objektflags des Objekts 'object'
- im Baum 'tree' durch Maskierung löschen
-
- int ob_isflag(OBJECT *tree,int object,int masc);
- -> Bits 'masc' der Objektflags des Objekts 'object' im Baum
- 'tree' testen
- -> Rückgabewert:
- TRUE (1): alle Bits gesetzt
- FALSE (0): Bits (teilweise) nicht gesetzt
-
- void ob_setflags(OBJECT *tree,int object,int flags);
- -> Objektflags des Objekts 'object' im Baum 'tree' auf den
- Wert 'flags' setzen
-
- void ob_xywh(OBJECT *tree,int object,GRECT *rect);
- -> Ausmaße und Koordinaten (relativ zur linken oberen Ecke
- des übergeordneten Objekts) des Objekts 'object' im Baum
- 'tree' ermitteln und in der GRECT-Struktur 'rect' sichern
-
- char *ob_get_text(OBJECT *tree,int object,int clear);
- -> Zeiger auf den Text des Objekts 'object' im Baum 'tree'
- ermitteln und Text löschen, sofern 'clear' ungleich Null
- (Funktion beachtet erweiterte Objekttypen (Attribut-Text))
- -> Rückgabewert gleich NULL, wenn es sich um kein Text-Objekt
- handelt
-
- void ob_set_text(OBJECT *tree,int object,char *text);
- -> Text des Objekts 'object' im Baum 'tree' auf 'text' setzen
- (Funktion beachtet erweiterte Objekttypen (Attribut-Text))
-
- void ob_clear_edit(OBJECT *tree)
- -> Text in allen Eingabefeldern des Baums 'tree' löschen
- (Funktion nur verfügbar, wenn Library nicht als Light-
- Version übersetzt wurde)
-
- int ob_set_hotkey(OBJECT *tree,int object,char hotkey);
- -> Hotkey des Objekts 'object' im Baum 'tree' auf den
- Buchstaben 'hotkey' setzen (Hotkey-Unterstrich wird
- automatisch angepaßt)
- -> Rückgabewert ungleich FALSE -> Hotkey konnte gesetzt werden
-
- char ob_get_hotkey(OBJECT *tree,int object);
- -> Hotkey des Objekts 'object' im Baum 'tree' ermitteln
- -> Rückgabewert gleich Null, wenn kein Hotkey gesetzt war
-
- int ob_draw_chg(DIAINFO *info,int object,GRECT *area,
- int new_state,boolean top);
- -> Objekt 'object' (und untergeordnete Objekte) des Dialogs
- 'info' darstellen und gegebenenfalls Objektstatus ändern
- (new_state>=0, s. objc_change)
- -> Begrenzung des Ausgabebereichs auf das Reckteck 'area' oder
- auf die Ausmaße des Dialogs (area==NULL)
- -> Ist der Dialog 'info' der oberste Dialog bzw. im obersten
- Fenster, so kann die Ausgabe durch Setzen des Parameters
- 'top' auf einen Wert ungleich Null beschleunigt werden
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Objekt konnte nicht ausgegeben werden
- FAIL: Objekt-Status konnte nicht gesetzt werden
-
- int ob_draw(DIAINFO *info,int object)
- -> Objekt 'object' (und untergeordnete Objekte) des Dialogs
- 'info' darstellen (verkürzter Aufruf von
- ob_draw_chg(info,object,NULL,FAIL,FALSE))
-
- int ob_draw_list(DIAINFO *info,int *objects,GRECT *area);
- -> Liste von Objekten 'objects' (und untergeordnete Objekte)
- des Dialogs 'info' darstellen (Abbruch der Liste mit
- negativem Wert oder Null)
- -> Begrenzung des Ausgabebereichs auf das Reckteck 'area' oder
- auf die Ausmaße des Dialogs (area==NULL)
- -> Diese Funktion ist schneller als die einzelne Ausgabe
- von mehreren Objekten über ob_draw_chg()
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Objekte konnten nicht ausgegeben werden
-
- void ob_draw_dialog(OBJECT *tree,int x,int y,int w,int h);
- -> Dialog 'tree' zentrieren, Bildschirmbereich reservieren,
- eine sich öffnende Box von der Dialogmitte zu den
- Koordinaten (x,y,w,h) zeichnen (sofern Parameter x,y,w,h
- größer als Null sind) und Dialog darstellen
-
- void ob_undraw_dialog(OBJECT *tree,int x,int y,int w,int h);
- -> Eine sich schließende Box von den Koordinaten (x,y,w,h) zur
- Dialogmitte zeichnen (sofern Parameter x,y,w,h größer als
- Null sind) und Bildschirmbereich freigeben
-
- int ob_radio(OBJECT *tree,int parent,int object)
- -> Radio-Buttons innerhalb des übergeordneten Objekts 'parent'
- im Baum 'tree' auf neues Objekt 'object' (Index des
- Radio-Buttons, nicht Objekt-Nummer!) setzen bzw.
- aktuell gesetztes Objekt ermitteln (object<0)
- -> Rückgabewert: Gesetztes Objekt
-
- int ob_get_parent(OBJECT *tree,int object);
- -> Elternobjekt des Objekts 'object' im Baum 'tree' ermitteln
-
- 4. Erweiterte Rechteck-Routinen (u.a. kompatibel zum PC-GEM 2.0)
- -------------------------------------------------------------
-
- void rc_grect_to_array(GRECT *rect,int *array);
- -> Reckteck 'rect' in Koordinaten-Feld 'array' wandeln
-
- void rc_array_to_grect(int *array,GRECT *rect);
- -> Koordianten-Feld 'array' in Rechteck 'rect' wandeln
-
- int rc_copy(GRECT *src,GRECT *dst);
- -> Rechteck 'src' nach Rechteck 'dst' kopieren
- -> Rückgabewert ist immer Null
-
- int rc_equal(GRECT *rect1,GRECT *rect1);
- -> Testet die Rechtecke 'rect1' und 'rect2' auf Gleichheit
- (Rückgabewert ungleich Null)
-
- int rc_intersect(GRECT *src,GRECT *dst);
- -> schneidet das Rechteck 'src' mit dem Rechteck 'dst'
- und gibt den gemeinsamen Bereich in 'dst' zurück
- -> Rückgabewert gleich Null, sofern die Rechtecke keinen
- gemeinsamen Bereich besitzen
-
- int rc_inside(int x,int y,GRECT *rect);
- -> Testet, ob die Koordinaten (x,y) im Rechteck 'rect'
- liegen (Rückgabewert ungleich Null)
-
- WICHTIG:
- Alle rc_sc_()-Funktionen schalten weder die Maus an/aus noch
- setzen sie den wind_update()-Status!
-
- RC_RECT-Struktur:
- -----------------
-
- typedef struct
- {
- /* Rechteck-Struktur gültig? (valid!=0) */
- int valid;
-
- /* Koordinaten des ursprünglichen Bildschirmrechtecks */
- GRECT area;
-
- /* alle weiteren Variablen dieser Struktur sind nur für INTERNE
- Zwecke */
- } RC_RECT;
-
- int rc_sc_save(GRECT *area,RC_RECT *rc)
- -> Bildschirmbereich 'area' in Rechteck-Struktur 'rc' sichern
- -> Rückgabewert: (entsprechend rc->valid)
- TRUE: Bereich konnte gesichert werden
- FALSE: Nicht genügend Speicher oder Bereich teilweise
- außerhalb des Bildschirms
-
- int rc_sc_freshen(int sx,int sy,RC_RECT *rc)
- -> Rechteck-Struktur 'rc' erneuern, d.h. Bildschirmbereich
- an den Koordinaten (sx,sy) in Puffer kopieren
- -> Rückgabewert:
- TRUE: Bereich konnte gesichert werden
- FALSE: Rechteck-Struktur nicht gültig oder Bereich
- teilweise außerhalb des Bildschirms
-
- int rc_sc_restore(int dx,int dy,RC_RECT *rc,int mode)
- -> Rechteck-Struktur 'rc' freigeben und/oder an Position
- (dx,dy) zurückkopieren
- -> Parameter 'mode':
- TRUE: Bereich zurückkopieren und Speicher freigeben
- FALSE: Bereich nur zurückkopieren
- FAIL: Nur Speicher freigeben
- -> Rückgabewert:
- TRUE: Alles in Ordnung
- FALSE: Rechteck-Struktur ungültig
-
- void rc_sc_copy(GRECT *src,int x,int y,int mode);
- -> Kopiert den Bildschirmbereich 'src' zu den Koordinaten
- (x,y) (Kopiermodus 'mode' s. vro_cpyfm)
-
- void rc_sc_clear(GRECT *rect);
- -> Löscht den Bildschirmbereich 'rect'
-
- void rc_sc_invert(GRECT *rect);
- -> Invertiert den Bildschirmbereich 'rect'
-
- int rc_sc_scroll(GRECT *in_out,int dist_x,int dist_y,GRECT *out2)
- -> Rechteck 'in_out' um Distanz (dist_x,dist_y) verschieben
- und neuzuzeichnende Rechtecke in 'in_out' und 'out2'
- zurückgeben. Dabei wird automatisch der Bereich auf den
- Bildschirm beschränkt. (diese Funktion ist die Grundlage
- der Funktion scroll_window())
- -> Rückgabewerte:
- 0 - kein Redraw nötig
- 1 - Rechteck 'in_out' muß neugezeichnet werden
- 2 - Rechteche 'in_out' und 'out2' müssen neugezeichnet
- werden (nur bei diagonalem Scrolling)
-
- 5. VDI-Attribut- und Clipping-Funktionen
- -------------------------------------
-
- Hinweis:
- --------
- Das Clipping der internen Workstation ist normalerweise auf das
- Desktopfenster oder während eines Redraws auf Bereiche der
- Rechteckliste eines Fensters gesetzt. Grundsätzlich ist der
- Ausgabebereich aber INNERHALB des Bildschirms!
-
- void vsf_aespattern(int handle, int x, int y, int pattern)
- -> an die Koordinaten (x,y) angepaßtes AES-Füllmuster
- 'pattern' (0-7) berechnen und als neues Füllmuster der
- Workstation 'handle' setzen
-
- void vs_attr(void);
- -> wurden die Attribute der internen VDI-Workstation x_handle
- nicht über Library-Funktionen verändert, so muß diese
- Funktion sofort danach aufgerufen werden, um dies der Library
- kenntlich zu machen
-
- void v_set_text(int font,int height,int color,int out[4])
- -> VDI-Text-Attribute der internen Workstation x_handle setzen:
- font: Font-ID
- height: Höhe in Pixel (>0) oder in Punkt (<0)
- color: Text-Farbe
- out: Array für Rückgabewerte von vst_height/vst_point
- oder NULL
-
- void v_set_mode(int mode);
- -> Grafikmodus der internen Workstation x_handle auf
- den Wert 'mode' (0-3) setzen
-
- void v_set_line(int color,int width);
- -> VDI-Linien-Attribute der internen Workstation
- x_handle setzen: (neg. Wert -> keine Veränderung)
- color: Linien-Farbe
- width: Linien-Dicke
-
- void v_set_fill(int color,int interior,int style);
- -> VDI-Füllmuster-Attribute der internen Workstation
- x_handle setzen: (neg. Wert -> keine Veränderung)
- color: Füllmuster-Farbe
- vsf_interior: Füllmuster-Typ (0-4)
- vsf_style: Füllmuster-Stil
-
- void v_aespattern(int x,int y,int pattern);
- -> an die Koordinaten (x,y) angepaßtes AES-Füllmuster
- 'pattern' (0-7) berechnen und als neues Füllmuster der
- internen Workstation x_handle setzen
-
- void save_clipping(int *array);
- -> aktuellen Clipping-Bereich im Koordinaten-Feld 'array'
- sichern
-
- void restore_clipping(int *array);
- -> Clipping-Bereich auf Koordinaten-Feld 'array' setzen
-
- HINWEIS:
- Wird die interne VDI-Workstation benutzt, so muß sichergestellt
- sein, daß entweder Library-Funktionen benutzt oder die Attribute
- in ihren ursprünglichen Zustand zurückgesetzt werden.
- Ist dies nicht der Fall, muß sofort nach Veränderung der Attribute
- die Funktion vs_attr() aufgerufen werden. Allerdings darf auf keinen
- Fall der Clipping-Bereich verändert werden, d.h. er ist mit
- save_clipping()/restore_clipping wiederherzustellen.
-
- 6. Erweiterte Scrap-Directory-Routinen
- -----------------------------------
-
- int scrp_path(char *path,char *file)
- -> vollständigen Zugriffspfad der Clipboard-Datei 'file'
- (sofern file!=NULL) ermitteln. Wird für den Parameter 'file'
- NULL übergeben, so wird nur der Clipboard-Pfad ermittelt.
- -> Rückgabewert:
- TRUE: Alles in Ordnung
- FALSE: Kein Clipboard-Pfad gesetzt
-
- void scrp_clear(int all);
- -> Alle Dateien (all!=0) oder nur die 'SCRAP.*'-Dateien
- im Scrap-Directory löschen
-
- long scrp_length(void);
- -> Berechnung der Länge des Inhalts des Scrap-Directories
-
- int scrp_find(char *extensions,char *filename);
- -> Scrap-Directory (Clipboard) nach Scrap-Datei mit einer
- der durch Komma, Punkt oder Leerzeichen getrennten
- Erweiterungen 'extensions' durchsuchen, z.B.
- scrp_find("img.txt.asc.ps",scrap). Dabei wird die Liste
- von links nach rechts abgearbeitet.
- -> String 'filename' enthält im Erfolgsfall (Rückgabewert
- ungleich Null) den kompletten Pfad der gefundenen Datei
-
- void scrp_changed(int format,long best_ext);
- -> Clipboard-Inhalt wurde verändert (SC_CHANGED-Nachricht
- wird (per XAccBroadCast) an alle Applikationen sowie
- AV_PATH_UPDATE an den AV-Server gesendet), wobei nach
- dem Löschen des Clipboards scrp_changed(SCF_INDEF,0l)
- aufgerufen werden sollte.
- -> format: Bitmap des Dateiformats
-
- #define SCF_INDEF 0x0000 /* undefiniert */
- #define SCF_DBASE 0x0001 /* Datenbank */
- #define SCF_TEXT 0x0002 /* Text */
- #define SCF_VECTOR 0x0004 /* Vektor-Grafik */
- #define SCF_RASTER 0x0008 /* Raster-Grafik */
- #define SCF_SHEET 0x0010 /* Tabellen-Kalkulation */
- #define SCF_SOUND 0x0020 /* Sound */
-
- -> best_ext: 4 Zeichen (z.B. ".RTF") für die "beste" der
- abgespeicherten Dateien
-
- 7. Erweiterte Grafik-Routinen
- --------------------------
-
- void graf_busy_mouse(void);
- -> Maus als rotierende Scheibe darstellen
-
- void graf_set_slider(SLINFO *slider,OBJECT *tree,int mode);
- -> Elemente des Sliders 'slider' im Baum 'tree'
- anhand der Werte der SLINFO-Struktur initialisieren und
- gegebenenfalls neuzeichnen
- -> mode: Bitmap der Initialisierung
-
- #define GRAF_SET_ARROWS 1
- -> Slider-Pfeile setzen
- #define GRAF_SET_SIZE_POS 2
- -> Größe/Position des Schiebers berechnen und setzen
- #define GRAF_SET 3
- -> wie GRAF_SET_ARROWS und GRAF_SET_SIZE_POS
- #define GRAF_DRAW_SLIDER 4
- -> Slider-Elemente zeichnen
- #define GRAF_DRAW 7
- -> wie GRAF_SET und GRAF_DRAW_SLIDER
-
- void graf_arrows(SLINFO *slider,OBJECT *tree,int draw);
- -> Pfeile des Sliders 'slider' im Baum 'tree' initialisieren
- und gegebenenfalls neuzeichnen (draw!=0)
-
- void graf_rt_slidebox(SLINFO *slider,int object,int double_click);
- -> Echtzeitslider auswerten und darstellen (diese Routine wird
- intern automatisch aufgerufen, wenn die SLINFO-Strukturen
- bei open_dialog() übergeben wurden)
- -> Parameter:
- slider: Zeiger auf SLINFO-Struktur des Sliders
-
- #define HOR_SLIDER 0 /* horizontaler Slider */
- #define VERT_SLIDER 1 /* vertikaler Slider */
-
- #define SL_STEP 0 /* Einzelschritt */
- #define SL_LINEAR 1 /* linear */
- #define SL_LOG 2 /* logarithmisch */
- #define SL_EXP 3 /* exponential */
-
- typedef struct
- {
- /* Scan-Code des Ereignisses (Highbyte: Scan-Code,
- Low-Byte: ASCII-Code oder Null) */
- int scan;
-
- /* Sondertastenstatus */
- int state;
-
- /* Slider-Kommando (s. Beschreibung des
- Parameters 'object')
- int cmd;
- } SLKEY;
-
- typedef struct
- {
- /* Zeiger auf DIAINFO-Struktur des Dialogs */
- DIAINFO *sl_info;
-
- /* Nummer des Elternobjekts */
- int sl_parent;
-
- /* Objektnummer des Schiebers */
- int sl_slider;
-
- /* Objektnummern der Pfeile oder negative Werte */
- int sl_dec,sl_inc;
-
- /* Position, Seitenlänge und Maximalwert des Schiebers */
- int sl_pos,sl_page,sl_max;
-
- /* Richtung des Sliders: */
- char sl_vh; /* HOR_SLIDER,VERT_SLIDER */
-
- /* Wiederholungs-Modus der Pfeile */
- char sl_mode; /* SL_STEP,SL_LINEAR,SL_LOG,SL_EXP */
-
- /* Verzögerungsdauer in Milisekunden vor und während der
- Wiederholung */
- int sl_delay,sl_speed;
-
- /* Zeiger auf Routine (oder NULL), welche nach jeder
- Veränderung des Sliderwerts 'sl_pos' aufgerufen wird */
- void (*sl_do)(OBJECT *obj,int pos,int prev,
- int max_pos,int top);
- /* obj: Zeiger auf das Slider-Objekt
- pos: aktuelle Position des Schiebers
- prev: vorherige Position des Schiebers
- max_pos: maximale Position des Schiebers
- top: Dialog ist im Vordergrund */
-
- /* Zeiger auf Feld mit Slider-Hotkeys oder NULL (wird
- nur ausgewertet, wenn die SLINFO-Struktur bei
- open_dialog() übergeben wurde) */
- SLKEY *sl_keys;
-
- /* Anzahl der Hotkeys im Feld 'sl_keys' */
- int sl_keys_cnt;
- } SLINFO;
-
- object: angeklicktes Objekt oder eines der folgenden
- Kommandos:
-
- #define SL_UP -1 /* Zeile hoch */
- #define SL_DOWN -2 /* Zeile runter */
- #define SL_PG_UP -3 /* Seite hoch */
- #define SL_PG_DN -4 /* Seite runter */
- #define SL_START -5 /* Slider-Anfang */
- #define SL_END -6 /* Slider-Ende */
-
- double_click: Objekt wurde per Doppelklick angeklickt
-
- int graf_rt_rubberbox(int s_x,int s_y,GRECT *rect,int *w,int *h,
- void(*box_do)(int *array));
- -> Echtzeitgummiband innerhalb des Rechtecks 'rect' mit den
- Start-Koordinaten (s_x,s_y) auswerten und darstellen
- -> Im Erfolgsfall (Rückgabewert!=0) enthalten die Variablen
- '*w' und '*h' die Breite und Höhe des Rechtecks
- -> 'box_do' enthält einen Zeiger auf eine Funktion (oder NULL),
- welche nach jeder Veränderung des Rechtecks mit einem
- Zeiger auf das Koordinaten-Array 'array' des Rechtecks
- aufgerufen wird
-
- 8. Menü-Funktionen
- ---------------
-
- WICHTIG:
- --------
- Alle Menü-Funktionen, bei denen kein Zeiger auf den Objektbaum
- übergeben wird, funktionieren nur, wenn vorher eine Menü-Leiste
- per menu_install() angemeldet wurde! Ansonsten müssen die
- entsprechenden AES-Funktionen benutzt oder die Objekt-Attribute
- direkt manipuliert werden.
- Unter MultiTasking wird beachtet, welcher Applikation die Menü-
- leiste gehört, um unnötige Prozeßumschaltungen zu verhindern.
-
- int menu_install(OBJECT *menu,int show);
- -> Menü-Leiste 'menu' darstellen (show!=0) oder löschen
- (show==0). Diese Funktion berücksichtigt, ob gegebenenfalls
- auch ein Accessory eine Menü-Leiste besitzen darf und ini-
- tialisiert die Menü-Punkte 'Fenster wechseln' und 'Fenster
- schließen'
- -> Rückgabewert wie bei 'menu_bar'
-
- void menu_enable(boolean enable);
- -> Menü-Leiste aktivieren (enable==TRUE) bzw. deaktivieren
- (enable==FALSE) und neuzeichnen.
-
- void menu_item_enable(int object,int enable)
- -> Menü-Eintrag 'object' aktivieren (enable!=0) oder
- deaktivieren (enable==0)
-
- void menu_select(int title,int select)
- -> Menü-Titel 'title' normal (select==0) oder invers
- (select!=0) darstellen
-
- boolean menu_dropped();
- -> Testen, ob ein Drop-Down-Menü der Menüleiste heruntergeklappt
- ist
-
- 9. Dialog-Optionen und -optik setzen
- ---------------------------------
-
- void dial_colors(int dialog_pattern,int dialog_color,
- int cycle_button,int hotkey,int check_box,
- int radio_button,int arrow,int alert)
- -> Dialog-Optik setzen:
- dialog_pattern: Hintergrundmuster des Dialogs (0-7)
- dialog_color: Hintergrundfarbe des Dialogs (0-15)
- cycle_button: Cycle-Button-Farbe (0-15)
- check_box: Checkbox-Farbe (0-15)
- radio_button: Radio-Button-Farbe (0-15)
- arrow: Slider-Arrow-Farbe (0-15)
- alert: Farbe des Alert-Icons (0-15)
-
- void dial_options(boolean round,boolean title_frame,
- boolean title_small,boolean niceline,
- boolean return_default,boolean background,
- boolean nonselectable,boolean always_keys,
- boolean toMouse);
- -> verschiedene Optionen setzen:
- round: Dialogpositionen und Fensterpositionen
- auf Bytegrenzen (aus Geschwindigkeits-
- gründen) runden
- title_frame: Überschriften umrahmen
- title_small: Kleine Schrift (SMALL) für Überschriften
- niceline: Niceline für Trennstriche in Menüs/Popups
- return_default: TRUE: Return selektiert Default-Objekt
- FALSE: Return springt zum nächsten Eingabefeld
- FAIL: Return selektiert Default-Objekt beim
- letzten Eingabefeld (ansonsten wie FALSE)
- background: Fensterdialoge (sowie mit open_window() ge-
- öffnete Fenster) können im Hintergrund
- wie normale Dialoge bedient werden
- nonselectable: Fliegende Dialoge fliegen auch beim Anklicken
- von nicht-selektierbaren/editierbaren
- Objekten
- always_keys: Tastendrücke werden auch bei fliegenden
- oder modalen Dialogen an die Anwendung
- weitergegeben
- toMouse: Tastendrücke an Fensterdialog unter Maus-
- zeiger senden, sofern oberster Dialog
- weder modal noch fliegend ist
- -> zusammen mit 'background' ist somit eine
- vollständige Bedienung von Hintergrund-
- dialogen möglich
-
- void title_options(boolean mode,int color,int size);
- -> Unterstrichenen Text einstellen:
- mode: Strich wird über die ganze Breite des Dialogs (TRUE)
- oder über die im Resource vorgebenen Koordinaten
- (FALSE) gezeichnet
- color: Strichfarbe (0-15)
- size: Strickdicke in Pixel oder Null, wenn der Wert aus
- der Resource-Struktur entnommen werden soll
-
- BUTTON-Struktur:
- ----------------
- typedef struct
- {
- /* Zeiger auf monochrome 16x16-Bitmap (32 Bytes) des
- selektierten und des normalen Buttons im geräte-
- abhängigen Format */
- int *but_on,*but_off;
- } BUTTON;
-
- void radio_image(int index,BUTTON *radiobutton);
- -> vordefinierte Images (index: 0-7) oder benutzerdefinierten
- Button 'radiobutton' (radiobutton!=NULL) für Radio-Buttons
- auswählen
-
- void check_image(int index,BUTTON *checkbox);
- -> vordefinierte Images (index: 0-5) oder benutzerdefinierten
- Button 'checkbox' (checkbox!=NULL) für Check-Box auswählen
-
- void cycle_image(int index,BUTTON *cyclebutton);
- -> vordefinierte Images (index: 0-1) oder benutzerdefinierten
- Button 'cyclebutton' (cyclebutton!=NULL) für Cycle-Buttons
- auswählen
-
- void arrow_image(int index,BUTTON *down,BUTTON *up,BUTTON *left,
- BUTTON *right);
- -> vordefinierte Images (index: 0-2) oder benutzerdefinierte
- Buttons 'down', 'up' 'left', 'right' (sofern ungleich NULL)
- für Slider-Pfeile auswählen
-
- 10. Bibliothek (AES,VDI) sowie Resource (de-) initialisieren
- --------------------------------------------------------
-
- boolean open_work(int *handle,int *work_out);
- -> virtuelle Bildschirm-Workstation öffnen
- -> Rückgabewert ungleich FALSE, wenn Workstation geöffnet
- werden konnte
- -> handle: VDI-Handle im Erfolgsfall
- work_out: work_out[57]-Feld
-
- void close_work(int handle);
- -> virtuelle Bildschirm-Workstation 'handle' schließen
-
- boolean init_gem(char *m_entry,char *x_name,char *a_name,
- int av_msgs,int va_msgs,int xacc_msgs)
- -> Initialisierung der Library
- - Anmeldung beim AES (appl_init)
- - Xacc-2/AV-Protokolle initialisieren
- - interne VDI-Workstation öffnen
- - Scrap-Directory initialisieren
- - globale Variablen sowie interne Strukturen initialisieren
- -> Parameter:
- m_entry: Eintrag im Accessory-Menü (als Accessory oder
- unter MTOS) oder NULL
- x_name: (erweiterter) XAcc-2-Programmname
- a_name: AV-Programmname (8 Zeichen wie bei appl_find)
-
- av_msgs: Bitmap der unterstützten Nachrichten der
- Nachricht AV_PROTOKOLL (VA_START wird von der
- Library immer angegeben und ausgewertet!)
-
- #define MSG_SETSTATUS 0x001 /* VA_SETSTATUS */
- #define MSG_START 0x002 /* VA_START */
-
- va_msgs: Bitmap der unterstützten Nachrichten der
- Nachricht VA_PROTOSTATUS (AV_SENDKEY, AV_EXIT,
- AV_ACCWINDOPEN/AV_ACCWINDCLOSED sowie
- AV_PATH_UPDATE werden von der Library immer an-
- gegeben und ausgewertet!)
-
- #define MSG_SENDKEY 0x001 /* AV_SENDKEY */
- #define MSG_ASKFILEFONT 0x002 /* AV_ASKFILEFONT */
- #define MSG_ASKCONFONT 0x004 /* AV_ASKCONFONT,
- AV_OPENCONSOLE */
- #define MSG_ASKOBJECT 0x008 /* AV_ASKOBJECT */
- #define MSG_OPENWIND 0x010 /* AV_OPENWIND */
- #define MSG_STARTPROG 0x020 /* AV_STARTPROG */
- #define MSG_ACCWINDOPEN 0x040 /* AV_ACCWINDOPEN,
- AV_ACCWINDCLOSED */
- #define MSG_STATUS 0x080 /* AV_STATUS, AV_GETSTATUS */
- #define MSG_COPY_DRAGGED 0x100 /* AV_COPY_DRAGGED */
- #define MSG_PATH_UPDATE 0x200 /* AV_PATH_UPDATE,
- AV_WHAT_IZIT,
- AV_DRAG_ON_WINDOW */
- #define MSG_EXIT 0x400 /* AV_EXIT */
-
- xacc_msgs: Bitmap der unterstützten ACC-Nachrichten (alle
- anderen ACC-Nachrichten werden automatisch
- ausgewertet)
-
- #define X_MSG_TEXT 0x001 /* ACC_TEXT */
- #define X_MSG_META 0x002 /* ACC_META */
- #define X_MSG_IMG 0x004 /* ACC_IMG */
-
- -> Rückgabewert:
- TRUE: Ok
- FALSE: Anmeldung beim AES oder Öffnen der Workstation
- schlug fehl
-
- void exit_gem(int status);
- -> Deinitialisierung der Library:
- - Dialoge und Fenster schließen
- - Menüleiste abmelden
- - Beenden der XAcc-2-/AV-Protokolle
- - geladene GDOS-Fonts wieder entfernen
- - interne VDI-Workstation schließen
- - Abmeldung beim AES (appl_exit), sofern Anwendung als
- Programm gestartet wurde (ansonsten Endlos-Timer)
- - Programm beenden und Wert 'status' zurückgeben
-
- boolean open_rsc((char *rscname,char *m_entry,char *x_name,char *a_name,int av_msgs,int va_msgs,int xacc_msgs)
- -> Initialisierung der Library (s. init_gem()) sowie Resource
- 'rscname' laden
- -> Parameter: s. init_gem()
- -> Rückgabewert:
- TRUE: Ok
- FALSE: Anmeldung beim AES oder Öffnen der Workstation
- FAIL: Resource-File konnte nicht geladen werden (Speicher-
- mangel oder falscher Pfad)
-
- void close_rsc(int status);
- -> Resource-Speicher freigeben und Library deinitialisieren
- (s. exit_gem())
-
- 11. Resource- und Objekt-Initialisierung
- ------------------------------------
-
- void fix_objects(OBJECT *tree,int scaling,
- int orig_cw,int orig_ch);
- -> erweiterte Objekte des Baums 'tree' initialisieren sowie
- gegebenenfalls Images/Icons skalieren (scale_image)
- und ins Geräteformat konvertieren (trans_image)
-
- -> Parameter:
- orig_cw: Breite des Entwurfsfonts in Pixel (meistens 8)
- oder negativer Wert für rsrc_obfix()-kompatible
- Anpassung
- orig_ch: Höhe des Entwurfsfonts in Pixel (meistens 8 oder
- 16) oder negativer Wert für rsrc_obfix()-kompa-
- tible Anpassung
- scaling: Bitmap des Skalierungs-Modus
-
- #define NO_SCALING 0 /* keine Skalierung */
- #define SCALING 1 /* Skalierung */
- #define TEST_SCALING 2 /* Testen, ob Skalierung not-
- wendig ist */
- #define DARK_SCALING 4 /* dunkle Skalierung */
-
- Beispiele:
- /* Nie skalieren */
- images = NO_SCALING;
-
- /* Immer skalieren */
- images = SCALING;
-
- /* Bei Bedarf (System-Font kleiner als Entwurfsfont)
- skalieren */
- images = SCALING|TEST_SCALING;
-
- /* Bei Bedarf dunkel skalieren */
- images = SCALING|TEST_SCALING|DARK_SCALING;
-
- void scale_image(OBJECT *object,int scaling,
- int orig_cw, int orig_ch);
- -> Image/Icon 'object' skalieren
- -> Parameter s. fix_objects()
-
- void trans_image(OBJECT *object);
- -> Image/Icon 'object' in Geräteformat konvertieren
-
- void rsrc_calc(OBJECT *tree,int scaling,int orig_cw,int orig_ch);
- -> Koordinaten und Ausmaße der Objekte des Baums 'tree' an
- Ausmaße des System-Fonts unter Beachtung der Ausmaße des
- Fonts, mit welchem die Resource-Datei erstellt wurde, an-
- passen und anschließend erweiterte Objekte initialisieren
- (s. fix_objects())
- -> Parameter s. fix_objects()
-
- void rsrc_init(int n_tree,int n_obs,int n_frstr,int n_frimg,
- int scaling,char **rs_strings,long *rs_frstr,
- BITBLK *rs_bitblk,long *rs_frimg,
- ICONBLK *rs_iconblk,TEDINFO *rs_tedinfo,
- OBJECT *rs_object,OBJECT **rs_trindex,
- RS_IMDOPE *rs_imdope,int orig_cw,int orig_ch)
- -> in Quelltext eingebundene Resource-Datei (*.RSH)
- initialisieren
-
- -> Parameter:
- n_tree: Anzahl der Bäume (NUM_TREE)
- n_obs: Anzahl der Objekte (NUM_OBS)
- n_frstr: Anzahl der freien Strings (NUM_FRSTR)
- n_frimg: Anzahl der freien Images (NUM_FRIMG)
-
- rs_strings: String-Array (Pointer zeigen auf alle
- Zeichenketten der Resource-Datei)
- rs_frstr: Index-Array (Indizes der freien Strings
- für das rs_strings-Array)
- rs_bitblk: BITBLK-Array (enthält alle Bit-Blöcke)
- rs_frimg: Index-Array (Indizes der freien Images
- für das rs_bitblk-Array)
- rs_iconblk: ICONBLK-Array (enthält alle icons)
- rs_tedinfo: TEDINFO-Array (enthält alle TEDINFO-Strukturen)
- rs_object: OBJECT-Array (enthält alle Objekte)
- rs_trindex: Index-Array (Indizes der Objektbäume
- für das rs_object-Array)
- rs_imdope: RS_IMDOPE-Array
-
- RS_IMDOPE-Struktur:
- -------------------
-
- typedef struct
- {
- int dummy;
- /* Zeiger auf Bitmap (Image) */
- int *image;
- } RS_IMDOPE;
-
- scaling: s. fix_objects()
- orig_cw: s. fix_objects()
- orig_ch: s. fix_objects()
-
- HINWEIS:
- An allen Stellen der Resource, an denen normalerweise
- Pointer vorkommen, muß der Element-Index (Long-Wert) des
- entsprechenden Arrays stehen. Die Image-Zeiger der
- Strukturen BITBLK und ICONBLK enthalten den Index des
- zugehörigen RS_IMDOPE-Elements.
-
- 12. Ereignis-Auswertung
- -------------------
-
- XEVENT-Struktur:
- ----------------
-
- typedef struct
- {
- /* PARAMETER: */
-
- /* Bitmap der gewünschten Events:
- MU_KEYBD: Tastatur-Ereignis
- MU_MESAG: Nachrichten-Ereignis
- MU_TIMER1-4: Timer-Ereignis 1-4
- MU_BUTTON1/2: Button-Ereignis 1/2
- MU_M1-4: Rechteck-Ereignis 1-4 */
- int ev_mflags;
-
- /* Parameter des 1. Button-Events MU_BUTTON1 */
- int ev_mb1clicks,ev_mb1mask,ev_mb1state
-
- /* Parameter des 1. Mouse-Event-Rechtecks MU_M1 */
- int ev_mm1flags,ev_mm1x,ev_mm1y,ev_mm1width,ev_mm1height,
-
- /* Parameter des 2. Mouse-Event-Rechtecks MU_M2 */
- int ev_mm2flags,ev_mm2x,ev_mm2y,ev_mm2width,ev_mm2height;
-
- /* Parameter des 1. Timer-Events MU_TIMER1 */
- unsigned int ev_mtlocount,ev_mthicount;
-
- /* RÜCKGABEWERTE: */
-
- /* eingetretene Ereignisse */
- int ev_mwich;
-
- /* Position des Mauszeigers sowie Zustand der Maustasten
- beim Auftreten des Events */
- int ev_mmox,ev_mmoy,ev_mmobutton;
-
- /* Zustand der Sondertasten beim Auftreten des Events */
- int ev_mmokstate;
-
- /* Scancode der gedrückten Taste (High-Byte: Scan-Code,
- Low-Byte: ASCII-Code oder Null) */
- int ev_mkreturn;
-
- /* Anzahl der Klicks mit der Maustaste (MU_BUTTON1) */
- int ev_mb1return;
-
- /* Nachrichten-Puffer */
- int ev_mmgpbuf[8];
-
- /* erweiterte PARAMETER: */
- /* Parameter des 2. Button-Events MU_BUTTON2 */
- int ev_mb2clicks,ev_mb2mask,ev_mb2state;
-
- /* Parameter des 3. Mouse-Event-Rechtecks MU_M3 */
- int ev_mm3flags,ev_mm3x,ev_mm3y,ev_mm3width,ev_mm3height;
-
- /* Parameter des 4. Mouse-Event-Rechtecks MU_M4 */
- int ev_mm4flags,ev_mm4x,ev_mm4y,ev_mm4width,ev_mm4height;
-
- /* Parameter des 2-4. Timer-Events MU_TIMER2-4 */
- long ev_mt2count,ev_mt3count,ev_mt4count;
-
- /* Zeitpunkt in Milisekunden des letzten Timer-Events
- MU_TIMER1-4 oder Null für aktuelle System-Zeit */
- long ev_mt1last,ev_mt2last,ev_mt3last,ev_mt4last;
-
- /* Anzahl der Klicks mit der Maustaste (MU_BUTTON2) */
- int ev_mb2return;
- } XEVENT;
-
- Kompatibilitäts-Makros für EVENT-Struktur und AES-Event-Routinen:
- -----------------------------------------------------------------
-
- #define ev_mbclicks ev_mb1clicks
- #define ev_mbmask ev_mb1mask
- #define ev_bmask ev_mb1mask
- #define ev_mbstate ev_mb1state
- #define ev_mbreturn ev_mb1return
-
- #define ev_mtlocount ev_mt1locount
- #define ev_mthicount ev_mt1hicount
- #define ev_mtlast ev_mt1last
-
- #define MU_TIMER1 MU_TIMER
- #define MU_BUTTON1 MU_BUTTON
-
- int Event_Multi(XEVENT *event);
- -> Auf Ereignis 'event' warten (benötigte Parameter der
- Struktur müssen initialisiert sein, sofern dies nicht
- die Initialisierungs-Routine von Event_Handler(), s.u.,
- übernimmt). Die Library wertet dabei selbständig Nachrichten
- der XAcc-2-, AV- und Drag&Drop-Protokolle aus und wandelt
- diese gegebenenfalls um. Ebenso werden Ereignisse, welche
- Fenster (-dialoge) bzw. allgemein die Library betreffen,
- ausgewertet.
-
- WICHTIG:
- Es werden nur Ereignisse zurückgeliefert, welche nicht von
- der Library oder dem durch die Funktion Event_Handler()
- definierten Handler ausgewertet wurden!
- Setzt man die Variable 'ev_mflags' auf Null oder übergibt man
- den Wert NULL für den Parameter 'event', so werden KEINE
- Events zurückgeliefert! Alle Ereignisse müssen dann vom
- Handler initialisiert und ausgewertet werden!
- Library-spezifische Nachrichten (s.u.) werden NUR an den
- Event-Handler geliefert!!!
-
- -> Rückgabewert: Bitmap der eingetretenen Ereignisse
-
- void Event_Timer(int locount,int hicount)
- -> Wartet bis die durch lo_count und hi_count in Millisekunden
- vorgebene Zeit verstrichen ist. Dabei werden allerdings
- noch Nachrichten durch die Library (der Nachrichtenpuffer
- wird komplett geleert) sowie Ereignisse durch den Handler
- ausgewertet, so daß diese Funktion z.B. während eines
- rechenintensiven Vorgangs dazu benutzt werden kann,
- Ereignisse durch einen Aufruf mit kurzer Wartezeit auszu-
- werten (z.B. Fenster verschieben, neuzeichnen etc...)
-
- void Event_Handler(int (*init)(XEVENT *,int,int),
- int (*handler)(XEVENT *));
- -> Routinen zur Ereignisauswertung festlegen, wobei diese Rou-
- tinen diejenigen Ereignisse auswerten, welche nicht auto-
- matisch von der Library bearbeitet wurden. Durch Übergabe
- von NULL können bereits angemeldete Funktionen einzeln wieder
- abgemeldet werden. Ebenso kann man die Routinen beliebig
- oft neu setzen, z.B. für eine lokale Ereignisauswertung.
-
- -> Parameter:
- int (*init)(XEVENT *event,int available):
- -> Routine, welche u.a. von X_Form_Do bei jeder
- Initialisierung eines Dialogs aufgerufen wird. Die
- Routine gibt eine Bitmap der gewünschten Events zu-
- rück und initialisiert gegebenenfalls Variablen der
- übergebenen XEVENT-Struktur 'event'.
- Angefordert werden können nur die Events, welche in
- der Bitmap 'available' gesetzt sind.
-
- int (*handler)(XEVENT *event):
- -> Routine, welche u.a. von X_Form_Do aufgerufen wird
- und die Ereignisse, welche von der Library nicht ver-
- arbeitet wurden, auswertet. Zurückgegeben wird eine
- Bitmap der ausgewerteten Ereignisse. V.a. bei Tasta-
- tur-Ereignissen, welche nicht ausgewertet wurden,
- sollte MU_KEYBD nicht gesetzt sein, damit die Library
- gegebenenfalls den Tastendruck per Xacc-2- oder AV-
- -Protokoll weiterleiten kann. Dies kann man natürlich
- unterbinden, indem man ständig alle Ereignisse zu-
- rückgibt.
-
- WICHTIG:
- Diese Routine darf keine Variablen der XEVENT-Struk-
- tur (abgesehen von den Ausgabewerten) verändern!
-
- Library-spezifische Nachrichten (MU_MESAG):
- -------------------------------------------
-
- -> Eingabefeld wurde verändert:
- msg[0] = OBJC_EDITED
- msg[3] = Nummer des aktuellen Eingabeobjekts
- oder negativer Wert, falls alle
- Eingabefelder betroffen sind
- msg[4]/msg[5] = Zeiger auf die DIAINFO-Struktur des
- Dialogs
-
- -> Status eines Objekts (kein EXIT-/TOUCHEXIT-Objekt,
- bei Slidern nach Positionsänderung das Schieber-
- Objekt) hat sich geändert:
- msg[0] = OBJC_CHANGED
- msg[3] = Nummer des Objekts
- msg[4]/msg[5] = Zeiger auf die DIAINFO-Struktur des
- Dialogs
-
- -> Größe oder Position des Dialogs hat sich geändert,
- wobei die Ausmaße des Wurzelobjekts bereits angepaßt
- wurden
- msg[0] = OBJC_SIZED
- msg[4]/msg[5] = Zeiger auf die DIAINFO-Struktur des
- Dialogs
-
- -> Daten wurden an Applikation per Drag&Drop übergeben
- msg[0] = OBJC_DRAGGED
- msg[4]/msg[5] = Zeiger auf DRAG_DROP-Struktur
-
- -> Applikation hat sich per XAcc-2- oder AV-Protokoll
- angemeldet
- msg[0] = XACC_AV_INIT
- msg[3] = Applikations-ID
- msg[4]/msg[5] = Zeiger auf XAcc-Struktur
-
- -> Applikation hat sich per XAcc-2- oder AV-Protokoll
- abgemeldet
- msg[0] = XACC_AV_EXIT
- msg[3] = Applikations-ID
- msg[4]/msg[5] = Zeiger auf XAcc-Struktur (Struktur
- ist nach vollständiger Abmeldung
- nicht mehr gültig
- (Struktur-Variable id<0)
-
- -> Status eines Fenster hat sich geändert (z.B. wurde
- das Fenster ikonifiziert/deikonifiziert). U.a. kann
- sich auch das Fenster-Handle ändern!
- msg[0] = WIN_CHANGED
- msg[4]/msg[5] = Zeiger auf die WIN-Struktur des
- Fensters oder NULL, falls alle
- Fenster betroffen sind
-
- -> Scrollposition eines Fensters wurde geändert
- msg[0] = WIN_SCROLLED
- msg[4]/msg[5] = Zeiger auf die WIN-Struktur des
- Fensters
- msg[6] = alte horizontale Position (hpos)
- msg[7] = alte vertikale Position (vpos)
-
- 13. Dialog-Funktionen
- -----------------
-
- DIAINFO-Struktur:
- -----------------
-
- typedef struct
- {
- /* Dialog-Typ
- CLOSED -> geschlossen
- OPENED -> normaler Dialog
- FLYING -> fliegender Dialog
- WINDOW -> Fenster-Dialog
- WIN_MODAL -> modaler Fenster-Dialog */
- DIALMODE di_flag;
-
- /* Zeiger auf Objektbaum */
- OBJECT *di_tree;
-
- /* Zeiger auf Fenster-Struktur */
- WIN *di_win;
-
- /* alle weiteren Variablen dieser Struktur sind nur für INTERNE
- Zwecke */
- } DIAINFO;
-
- boolean open_dialog(OBJECT *tree,DIAINFO *info,char *title,
- char *icon_title, OBJECT *icon, boolean center,
- boolean grow_box,int dialog_mode,int edit, SLINFO **slider);
- -> Dialog öffnen (Rückgabewert ungleich Null, wenn Dialog ge-
- öffnet wurde)
- -> Parameter:
- tree:
- -> Zeiger auf Objektbaum
- info:
- -> Zeiger auf DIAINFO-Struktur (wird von dieser
- Funktion initialisiert)
- title:
- -> Zeiger auf Fenster-Titel für Fensterdialoge
- icon_title:
- -> Zeiger auf Fenstertitel im ikonifizierten Zustand
- oder NULL
- icon:
- -> Zeiger auf Objektbaum, der für die ikonifizierte
- Darstellung benutzt wird, oder NULL (in diesem
- Fall wird der globale Objektbaum 'iconified'
- benutzt)
- center:
- TRUE -> Dialog um Mauszeiger zentrieren
- FALSE -> Dialog in Bildschirmmitte zentrieren
- (sichtbarer Ausschnitt des Bildschirms
- wird beachtet)
- FAIL -> Dialog an letzter Position öffnen (beim
- ersten Öffnen analog wie FALSE)
- grow_box:
- -> sich vergrößernder Rechtecke zeichnen
- dialog_mode:
- -> Bitmap des Dialogtyps:
-
- /* fliegender Dialog */
- #define FLY_DIAL 1
-
- /* Fenster-Dialog */
- #define WIN_DIAL 2
-
- /* Fenster-Dialog, sofern Fenster geöffnet werden
- kann, ansonsten fliegender Dialog
- #define AUTO_DIAL (FLY_DIAL|WIN_DIAL)
-
- /* modaler Fensterdialog */
- #define MODAL 4
-
- /* Fenster-Dialog mit Rahmen */
- #define FRAME 8
-
- /* Fenster-Dialog kann nicht ikonifiziert werden */
- #define NO_ICONIFY 16
-
- /* Die folgenden Elemente des Dialogfensters müssen
- von der Anwendung ausgewertet u. gesetzt werden!
- Dabei wird die Größe des Fensters automatisch
- gesetzt, wenn WD_SET_SIZE übergeben wird. An-
- sonsten darf die Größe NICHT verändert werden! */
-
- /* Fenster-Dialog mit horizontalem Slider
- (Slider,Pfeile rechts/links) */
- #define WD_HSLIDER 256
-
- /* Fenster-Dialog mit vertikalem Slider
- (Slider,Pfeile hoch/runter) */
- #define WD_VSLIDER 512
-
- /* Fenster-Dialog mit Sizer */
- #define WD_SIZER 1024
-
- /* Fenster-Dialog mit Fuller */
- #define WD_FULLER 2048
-
- /* Fenster-Dialog mit Info-Zeile */
- #define WD_INFO 4096
-
- /* Größe bei WM_FULLED/WM_SIZED automatisch an-
- passen (Nachricht OBJC_SIZED wird anschließend
- an Anwendung geschickt) */
- #define WD_SET_SIZE 8192
-
- edit:
- -> Objektnummer des Eingabefeldes, in welchem sich
- der Cursor befinden soll (oder negativer Wert)
-
- slider:
- -> Zeiger auf Liste mit Adressen der SLINFO-Strukturen
- (letzter Listen-Eintrag gleich NULL) der Slider des
- Dialogs oder NULL, wenn die Slider nicht automatisch
- verwaltet werden sollen
-
- void close_dialog(DIAINFO *dialog,boolean shrink_box);
- -> Dialog 'dialog' schließen und gegebenenfalls sich
- verkleinernde Rechtecke zeichnen (shrink_box!=0)
-
- void close_all_dialogs(void)
- -> alle geöffneten Dialoge schließen
-
- int X_Form_Do(DIAINFO **dialog)
- -> Bearbeitung der geöffneten Dialoge
- -> Zurückgegeben wird die Nummer des angewählten Exit-Objekts
- (bei Doppelklick ist Bit 15 (0x8000) gesetzt) oder die Werte
- W_ABANDON -> Abbruch der Dialogbearbeitung, alle Dialoge
- wurden geschlossen (z.B. durch AC_CLOSE) bzw.
- beim Aufruf der Funktion waren keine Dialoge
- geöffnet
- W_CLOSED -> Fensterdialog wurde geschlossen
- -> '*dialog' enthält (sofern ungleich NULL) einen Zeiger auf
- die DIAINFO-Struktur des aktuellen Dialogs
-
- int xdialog(OBJECT *tree,char *title,char *icon_title,OBJECT *icon,
- boolean center,boolean grow_box,int dialog_mode);
- -> komplette Dialogbearbeitung (Dialog öffnen, bearbeiten und
- schließen), wobei diese Funktion nur verwendet werden sollte,
- wenn sonst kein Dialog geöffnet ist oder ein modaler oder
- fliegender Dialog geöffnet wird (z.B. um auf eine Benutzer-
- eingabe zu warten)
- -> Parameter und Rückgabewerte s. open_dialog() sowie
- X_Form_Do()
-
- int xalert(int default,int undo,int icon,BITBLK *user_icon,
- int modal,int center,int width,
- char *title,char *text,char *buttons)
- -> erweiterte Alertbox darstellen (zurückgeliefert wird der
- Index des ausgewählten Buttons oder FAIL im Fehlerfall)
- -> default: Index des DEFAULT-Buttons oder negativer Wert
- undo: Index des UNDO-Buttons oder negativer Wert
- icon: Nummer des Icons oder negativer Wert
-
- X_ICN_NONE: /* kein Icon */
- X_ICN_MAX: /* maximale Icon-Nummer */
-
- X_ICN_STOP: /* Stop-Schild (Hinweis) */
- X_ICN_QUESTION: /* Fragezeichen (Nachfrage) */
- X_ICN_ALERT: /* Ausrufezeichen (Warnung) */
-
- X_ICN_DISC_ERR: /* Disketten-I/O-Fehler */
- X_ICN_ERROR: /* Bomben-Fehler */
- X_ICN_FLOPPY: /* Disketten-Station */
- X_ICN_DISC: /* Diskette */
- X_ICN_INFO: /* Informations-Zeichen */
- X_ICN_PRT_ERR: /* Drucker-I/O-Fehler */
-
- user_icon: Zeiger auf benutzerdefiniertes Icon oder NULL
- modal: System-/Applikations-modale Alert-Box
-
- #define SYS_MODAL 0 /* System-Modal */
- #define APPL_MODAL 1 /* Applikations-Modal */
-
- center: Ausrichtung der Buttons
-
- #define BUTTONS_CENTERED 0 /* zentriert */
- #define BUTTONS_LEFT 1 /* linksbündig */
- #define BUTTONS_RIGHT 2 /* rechtsbündig */
-
- width: einheitliche Breite der Buttons (width!=0)
- title: Zeiger auf Fenster-Titel bei applikationsmodalen
- bzw. Überschrift bei systemmodalen Dialogen
- text: Zeiger auf Text (maximale 16 Zeilen getrennt
- durch '|'). Die Textattribute können durch die
- folgenden Zeichen (in beliebiger Reihenfolge)
- am ANFANG einer Textzeile gesetzt werden:
-
- Fett = '!'
- Unterstrichen = '_'
- Kursiv = '/'
- Hell = '~'
- Umrandet = '#'
- Schattiert = '@'
-
- buttons: Button-Text (maximal 6 Buttons getrennt durch
- '|', Hotkeymarkierung durch '[')
-
- char ascii_box(char *title)
- -> Sonderzeicheneingabebox öffnen (Parameter s. open_dialog())
- (Funktion nur verfügbar, wenn Library nicht als Light-
- Version übersetzt wurde)
- -> Rückgabewert: ausgewähltes Zeichen
-
- 14. Fenster-Funktionen
- ------------------
-
- WIN-Struktur:
- -------------
-
- typedef struct
- {
- /* Handle des Fensters (handle>0, falls Fenster geöffnet) */
- int handle;
-
- /* VDI-Handle der zum Fenster gehörenden VDI-Workstation
- (nach Aufruf von open_window() ist die Library-Workstation
- 'x_handle' als VDI-Workstation gesetzt)
- int vdi_handle;
-
- /* Bitmap der Fensterelemente (s. wind_create) */
- int gadgets;
-
- /* Bitmap des Fenster-Status */
- char iconified;
-
- #define ICONIFIED 1 /* Fenster ikonifiziert (MTOS) */
- #define SHADE 2 /* Fenster eingeklappt (Winx 2.3) */
- #define ICFS 4 /* Fenster ikonifiziert (ICFS) */
-
- /* Fenster hat maximale Ausmaße */
- char fulled;
-
- /* Position des Mauszeigers beim letzten Aufruf von
- window_mouse() oder window_set_mouse() (Variable ist
- ungültig bei Fensterdialogen!) */
- int inside;
-
- FAIL: Fenster ist im Hintergrund
- FALSE: Mauszeiger außerhalb des Arbeitsbereiches
- TRUE: Mauszeiger innerhalb des Arbeitsbereiches
-
- /* Größe (1-1000)/Position (0-1000) des horiz. Sliders */
- int sl_hpos,sl_hsize;
-
- /* Größe (1-1000)/Position (0-1000) des vert. Sliders */
- int sl_vpos,sl_vsize;
-
- /* Zeiger auf SCROLL-Struktur oder NULL */
- SCROLL *scroll;
-
- /* Zeiger auf Fenster-Titel oder NULL */
- char *name;
-
- /* Zeiger auf Titel im ikonifizierten Zustand oder NULL */
- char *icon_name;
-
- /* minimale Fensterbreite/-höhe */
- int min_w,min_h;
-
- /* maximale Fensterausmaße */
- GRECT max;
-
- /* Die folgenden Variablen beziehen sich IMMER auf den
- nicht ikonifizierten Zustand des Fensters! */
-
- /* aktuelle Fensterausmaße */
- GRECT curr;
-
- /* vorherige Fensterausmaße */
- GRECT prev;
-
- /* Fensterarbeitsbereich */
- GRECT work;
-
- /* alle weiteren Variablen dieser Struktur sind für
- INTERNE Zwecke reserviert */
- } WIN;
-
- SCROLL-Struktur:
- ----------------
-
- typedef struct
- {
- /* automatisches Scrolling (scroll!=0) oder nur Slider
- setzen und neue Werte der SCROLL-Struktur berechnen
- (scroll==0) */
- int scroll;
-
- /* Index des Objekts, welches beim automatische Scrolling
- (scroll!=0) eines Dialogs neugezeichnet werden soll. Hier
- kann natürlich immer das Wurzelobjekt angegeben werden
- (Clipping wird von der Library durchgeführt), aber aus Ge-
- schwindigkeitsgründen sollte man nur das betreffende Objekt
- angeben */
- int obj;
-
- /* Breite des Bereichs am linken/rechten Rand, der nicht
- verschoben werden darf (z.B. eine Toolbar). Diese Werte
- werden auch für die Berechnung der Sliderposition/-größe
- benötigt */
- int tbar_l,tbar_r;
-
- /* Breite des Bereichs am oberen/unteren Rand, der nicht
- verschoben werden darf (z.B. eine Toolbar) Diese Werte
- werden auch für die Berechnung der Sliderposition/-größe
- benötigt */
- int tbar_u,tbar_d;
-
- /* Breite/Höhe einer Spalte/Zeile
- (z.B. bei Textfenstern die Fontgröße, bei Grafikfenstern
- meistens 1) */
- int px_hline,px_vline;
-
- /* Horizontale/vertikale Position des Fensterinhalts
- (in Spalten/Zeilen) */
- int hpos,vpos;
-
- /* Horizontale/vertikale Fenstergröße (in Spalten/Zeilen) */
- int hsize,vsize;
-
- /* Horizontale/vertikale Seitengröße (in Spalten/Zeilen)
- (diese Variablen dürfen nicht verändert werden bzw. werden
- von der Library gesetzt!) */
- int hpage,vpage;
-
- /* Horizontale/vertikale Schrittweite (in Spalten/Zeilen) */
- int hscroll,vscroll;
-
- /* alle weiteren Variablen dieser Struktur sind für
- INTERNE Zwecke reserviert */
- } SCROLL;
-
- WICHTIG:
- Es dürfen nur noch diejenigen AES-Fensterroutinen verwendet
- werden, deren Funktionalität nicht von einer äquivalenten
- Library-Routine angeboten wird bzw. wenn das Fenster nicht
- von der Library verwaltet wird (Fenster 0 (Desktop) oder
- Fenster anderer Applikationen), dürfen alle AES-wind-Funktionen
- verwendet werden.
- Bei geöffneten systemmodalen Dialogen oder Popups werden Nach-
- richten und zu setzende Werte automatisch bis zum Schließen der
- der Dialoge/Popups gepuffert und dann an die Ereignisverwaltung
- weitergeleitet.
-
- WIN *open_window(char *title,char *icon_title,char *info,
- OBJECT *icon,int gadgets,int box,
- int min_w,int min_h,
- GRECT *max,GRECT *curr,SCROLL *scroll,
- void (*redraw)(WIN *,GRECT *))
- -> Fenster öffnen und bei einem evtl. vorhandenen AV-Server
- anmelden (AV_ACCWINDOPEN) sowie egebenenfalls die Hinter-
- grundbedienung aktivieren
- -> Parameter:
- title: Zeiger auf Fenstertitel oder NULL
- icon_title: Zeiger auf Fenstertitel im ikonifizierten Zu-
- stand oder NULL
- info: Zeiger auf Infozeile oder NULL
- gadgets: Bitmap der Fensterelemente wie bei
- wind_create()
- icon: Zeiger auf Objektbaum, der für die ikonifizierte
- Darstellung benutzt wird, oder NULL (in diesem
- Fall wird der globale Objektbaum 'iconified'
- benutzt)
- box: sich vergrößernde Rechtecke zeichnen (box!=0)
- min_w: minimale Fensterbreite
- min_h: minimale Fensterhöhe
- max: maximale Fensterausmaße
- max->g_x/g_y: minimale linke, obere Fenster-
- koordinaten (normalerweise die
- entsprechenden Koordinaten des
- Desktopfensters 'desk')
- max->g_w/g_h: maximale Fensterbreite/-höhe
- curr: Fensterausmaße
- scroll: Zeiger auf initialisierte SCROLL-Struktur für
- automatisches Scrolling oder NULL. Wurde die
- Scroll-Position geändert, so wird eine Nachricht
- WIN_SCROLLED verschickt. U.a. werden von der
- Library in diesem Fall auch Slidergröße und
- -position automatisch gesetzt.
- redraw: Routine, die den Fenster-Redraw übernimmt. Dabei
- muß weder das übergebene Rechteck mit der Recht-
- liste geschnitten noch das Clipping der VDI-
- Workstation gesetzt werden! (VDI-Handle der
- WIN-Struktur nach Aufruf von open_window()
- gegebenenfalls auf anderen Wert als die globale
- Library-Workstation 'x_handle' setzen)
- Wird für 'redraw' NULL übergeben, so wird
- die Nachricht WM_REDRAW (wie üblich) weiterge-
- leitet.
- -> Rückgabewert: Zeiger auf WIN-Struktur oder NULL
-
- void window_reinit(WIN *win,char *title,char *icon_title,
- char *info,int home)
- -> Fenster 'win' reinitialisieren und neuzeichnen. U.a.
- wird gegebenenfalls die SCROLL-Struktur auf gültige
- Werte gesetzt und die Größe des Fensters an die maximalen
- bzw. minimalen Ausmaße angepaßt.
- -> Parameter:
- title: Zeiger auf Fenstertitel oder NULL
- icon_title: Zeiger auf Fenstertitel im ikonifizierten Zu-
- stand oder NULL
- info: Zeiger auf Infozeile oder NULL
- home: Scroll-Position in linke obere Ecke (home!=0)
-
- int close_window(WIN *window,int box)
- -> Fenster 'window' schließen und gegebenenfalls (box!=0) sich
- verkleinernde Rechtecke zeichnen. Außerdem wird das Fenster
- bei einem evtl. vorhandenem AV-Server abgemeldet
- -> Rückgabewert gleich Null, wenn ein Fehler auftrat
-
- void close_all_windows(void)
- -> Alle geöffneten Fenster schließen. Sind vorher noch Dialoge
- geöffnet, so werden diese ebenfalls geschlossen.
-
- void redraw_window(WIN *win,GRECT *area)
- -> Löst einen Redraw über das Rechteck 'area' (area!=NULL) des
- Fensters 'win' oder den gesamten Fensterbereich (area==NULL)
- aus. Wurde für das Fenster kein Redraw-Handler angemeldet,
- so wird eine WM_REDRAW-Nachricht verschickt.
-
- void window_scroll_slider(WIN *win,int vh)
- -> horizontalen (vh==HOR_SLIDER) oder vertikalen
- (vh==VERT_SLIDER) Slider des Fensters 'win' anhand der
- Werte der Scroll-Struktur setzen
-
- void scroll_window(WIN *win,int mode,GRECT *area)
- -> Fensterinhalt des Fensters 'win' in Abhängigkeit vom Para-
- meter 'mode' scrollen (Fenster muß über eine SCROLL-Struktur
- verfügen!), wobei sowohl Slidergröße als auch -position
- automatisch angepaßt werden.
- -> Parameter:
- area: Bereich des Fensters oder NULL für gesamtes Fenster
- abzüglich der in der SCROLL-Struktur angegebenen
- Toolbar-Bereiche
- mode:
- /* an Anfang/Ende der Zeile */
- LINE_START,LINE_END
-
- /* an Anfang/Ende des Fensterinhalts */
- WIN_START,WIN_END
-
- /* Position (hpos,vpos) bereits gesetzt (wird automatisch
- an gültigen Bereich angepaßt) */
- WIN_SCROLL
-
- /* Seite nach links/oben/rechts/unten */
- PAGE_LEFT,PAGE_UP,PAGE_RIGHT,PAGE_DOWN
-
- /* Zeile/Spalte nach links/oben/rechts/unten */
- LINE_LEFT,LINE_UP,LINE_RIGHT,LINE_DOWN
-
- WIN *get_window(int handle)
- -> WIN-Struktur zum Fenster 'handle' ermitteln
- -> Rückgabewert gleich NULL, falls Struktur nicht gefunden
- werden konnte
-
- WIN *get_top_window(void)
- -> WIN-Struktur zum obersten Fenster ermitteln
- -> Rückgabewert gleich NULL, falls Struktur nicht gefunden
- werden konnte (Fenster gehört anderer Applikation oder
- kein Fenster geöffnet)
-
- int window_first(WIN *win,GRECT *rect);
- int window_next(WIN *win,GRECT *rect);
- -> Verkürzte Aufrufe von wind_xget(handle,WF_FIRSTXYWH,...)
- bzw. wind_xget(handle,WF_NEXTXYWH,...).
- -> Rückgabewert s. wind_xget()
-
- void window_size(WIN *win,GRECT *size)
- -> Ausmaße des Fensters 'win' auf 'size' setzen
- (im ikonifizierten Zustand wird die Größe erst nach der
- Deikonifizierung gesetzt)
- -> Wurde eine SCROLL-Struktur beim Öffnen des Fenster
- übergeben, so werden von dieser Funktion auch Slidergröße
- und -position automatisch gesetzt, wobei evtl. der Fenster-
- inhalt verschoben wird.
-
- void window_slider(WIN *win,int vh,int pos,int size)
- -> Vertikalen (vh==VERT_SLIDER) oder horizontalen
- (vh==HOR_SLIDER) Slider des Fensters 'win' setzen
- (im ikonifizierten Zustand werden die Werte erst nach der
- Deikonifizierung gesetzt)
- -> Parameter:
- pos: Position des Sliders (0-1000) oder FAIL
- size: Größe des Sliders (1-1000) oder
- FAIL
-
- void window_set_mouse(WIN *win,int in,int out,
- MFORM *in_form,MFORM *out_form)
- -> Form des Mauszeigers innerhalb und außerhalb des Arbeits-
- bereiches des Fensters 'win' festlegen und setzen. Der
- Mauszeiger wird i.A. automatisch verwaltet, wobei das
- Verlassen/Betreten des Arbeitsbereiches von der Anwendung
- überwacht werden muß (s. Beispielquelltext 'WINVIEW.C').
- Der Arbeitsbereich selber umfaßt dabei den Arbeitsbereich
- des Fensters abzüglich der evtl. angegebenen Ausmaße von
- "Toolbars".
- Diese Funktion hat keine Auswirkung auf Fensterdialoge!
- -> Parameter:
- in, in_form: Mausform innerhalb des Arbeitsbereichs
- (Bedeutung s. graf_mouse()). Wird für den
- Parameter 'in' ein negativer Wert übergeben,
- so wird die Mausform nicht gesetzt (dies ist
- voreingestellt)
- out, out_form: Mausform außerhalb des Arbeitsbereichs, Be-
- deutung s.o.
-
- void window_mouse(WIN *win)
- -> Mauszeiger des Fensters 'win' entsprechend den durch
- window_set_mouse() getroffenen Einstellungen setzen
-
- void window_name(WIN *win,char *title,char *icon_title)
- -> Titel des Fensters 'win' setzen
- -> Parameter:
- title: Zeiger auf Fenstertitel oder NULL
- icon_title: Zeiger auf Fenstertitel im ikonifizierten Zu-
- stand oder NULL
-
- void window_info(WIN *win,char *info)
- -> Info-Zeile des Fensters 'win' setzen (im ikonifizierten
- Zustand wird die Info-Zeile erst nach der Deikonifizierung
- gesetzt)
- -> Parameter:
- info: Zeiger auf Infozeile oder NULL
-
- void window_top(WIN *win)
- -> Fenster 'win' nach oben bringen (entspricht
- wind_set(handle,WF_TOP))
-
- void window_bottom(WIN *win)
- -> Fenster 'win' nach unten legen (entspricht
- wind_set(handle,WF_BOTTOM))
-
- WIN *window_find(int x,int y)
- -> WIN-Struktur des Fensters an den Koordinaten (x,y)
- ermitteln
- -> Rückgabewert gleich NULL, falls Struktur nicht gefunden
- werden konnte
-
- void window_calc(int wctype,int kind,GRECT *in,GRECT *out)
- -> Entspricht von der Funktionalität der AES-Funktion
- wind_calc(), nur daß anstatt einzelner Parameter Zeiger
- auf GRECT-Strukturen erwartet werden
-
- void window_border(int kind,int x,int y,int w,int h,GRECT *out)
- -> Koordinaten des Randbereichs (WC_BORDER) aus der linken,
- oberen Ecke (x,y) des Fensters und der Breite/Höhe des
- Arbeitsbereiches (w,h) berechnen und im Recheck 'out'
- zurückgeben. Dabei wird das Ausgaberechteck automatisch
- auf den Desktop begrenzt.
-
- void CycleCloseWindows(char cycle_hot,char close_hot,int cycle_menu,
- int close_menu)
- -> Hotkeys (+Control-Taste) und Menüpunkte für die Funktionen
- 'Fenster wechseln' sowie 'Fenster schließen' definieren.
- Beachtet werden alle Fensterdialoge sowie Fenster, die mit
- den Funktionen open_window() und close_window() geöffnet bzw.
- geschlossen werden. Der Menütitel wird nur dann deselektiert,
- wenn der Zeiger auf die Menüleiste 'menu' gesetzt ist!
- -> Parameter:
- cycle_hot,close_hot:
- -> Hotkey-Buchstaben oder Null (voreingestellt sind
- die Zeichen 'W' und 'U')
- cycle_menu,close_menu:
- -> Objektnummern der Pulldown-Menüeinträge oder neg. Werte
-
- 15. Popup-Funktion
- --------------
-
- POPUP-Struktur:
- ---------------
- typedef struct
- {
- /* Zeiger auf DIAINFO-Struktur des Parent-Dialogs
- oder NULL */
- DIAINFO *p_info;
-
- /* Zeiger auf Objektbaum des Popups */
- OBJECT *p_menu;
-
- /* Objektnummer des Info-Objekts (meistens Text links vom
- Popup-Button) oder negativer Wert */
- int p_parent;
-
- /* Objektnummer des Popup-Buttons oder negativer Wert */
- int p_button;
-
- /* Objektnummer des Cycle-Buttons (dabei muß es sich nicht
- um den erweiterten Typ CYCLE_BUTTON handeln) oder
- negativer Wert */
- int p_cycle;
-
- /* Beim Erreichen des ersten/letzten Eintrags mit den Cur-
- sor-Tasten Hoch/Runter wird zum letzten/ersten Eintrag
- gesprungen */
- boolean p_wrap;
-
- /* Der Text des Popup-Buttons wird automatisch auf den
- Wert des aktuellen Eintrags gesetzt und nach dem Ende
- der Popup-Bearbeitung neugezeichnet */
- boolean p_set;
- } POPUP;
-
- int Popup(POPUP *popup,int mode,int center,int x,int y,
- int *index,int select)
- -> Popup 'popup' öffnen, bearbeiten und wieder schließen
- -> mode: Popup-Modus
-
- #define POPUP_BTN 0 /* Popup-Button wurde angeklickt */
- #define POPUP_CYCLE 1 /* Cycle-Button wurde angeklickt */
- #define POPUP_CHECK 2 /* Häkchen vor aktuellem Eintrag */
-
- #define POPUP_BTN_CHK (POPUP_BTN|POPUP_CHECK)
- #define POPUP_CYCLE_CHK (POPUP_CYCLE|POPUP_CHECK)
- #define POPUP_RADIO POPUP_BTN_CHK
- #define POPUP_SELECT POPUP_BTN
-
- -> center: Position des Popups
-
- #define CENTER 1 /* in Bildschirm zentrieren */
- #define MOUSEPOS 2 /* um Mauszeiger zentrieren */
- #define XPOS 3 /* X-Koordinate x, vertikal
- um Mauszeiger zentrieren */
- #define YPOS 4 /* Horizontal um Mauszeiger zentrieren,
- Y-Koordinate y */
- #define XYPOS 5 /* Koordinaten (x,y) */
- #define OBJPOS 6 /* um aktuellen Eintrag zentrieren oder
- wie XYPOS */
-
- -> select: aktueller Eintrag oder negativer Wert
-
- -> zurückgegeben wird die Objektnummer des selektierten Eintrags
- (oder 0) sowie in '*index' (sofern index!=NULL) der Index
- des selektierten Eintrags. Ist Bit 15 (0x8000) des Rückgabe-
- wertes gesetzt, so wurde das Objekt per Doppelklick oder bei
- gedrückter Shift-Taste ausgewählt
-
- 16. XAcc-2- und AV-Protokoll-Funktionen
- -----------------------------------
-
- Die Library verwaltet intern alle An- und Abmeldungen der Proto-
- kolle XAcc2 und AV selbständig.
- Ebenso werden die Nachrichten AV_SENDKEY sowie ACC_KEY automatisch
- in Keyboard-Events umgewandelt bzw. nicht ausgewertete Keyboard-
- Events werden als AV_SENDKEY bzw. ACC_KEY an den AV-Server oder die
- Hauptapplikation geschickt.
- Die Nachricht AV_PATH_UPDATE wird u.a. automatisch beim Aufruf der
- Funktion scrp_changed verschickt und sollte ansonsten nicht ver-
- schickt werden. Die Nachrichten VA_START und VA_DRAGACCWIND werden
- automatisch ausgewertet und in eine ARGS_DRAG-Nachricht umgewandelt.
- Weiterhin werden nicht unterstützte XAcc2-Nachrichten mit einer
- ACC_ACK-FALSE-Nachricht beantwortet und per ACC_TEXT empfangene
- Texte werden im das aktuelle Eingabefeld im obersten Dialog einge-
- fügt. Ist das oberste Fenster kein Dialog, so wird die Nachricht
- an die Applikation weitergeleitet, sofern diese Nachricht unter-
- stützt wird.
-
- Alle Fensterdialoge sowie Fenster, die mit den Funktionen
- open_window() und close_window() geöffnet bzw. geschlossen werden
- (abgesehen von applikationsmodalen Alertboxen), werden bei einem
- eventuell vorhandenen AV-Server an- bzw. abgemeldet.
-
- #define XACC 1 /* XAcc-Protokoll */
- #define AV 2 /* AV-Protokoll */
-
- XAcc-Struktur:
- --------------
- typedef struct
- {
- /* unterstützte Protokolle (Bit 0: XAcc, Bit 1: AV) */
- int flag; /* XACC/AV */
-
- /* Applikations-Identifikation */
- int id; /* XAcc/AV-Protokoll */
-
- /* Bitmap der unterstützten AV/VA-Nachrichten (Format
- s. Funktion init_gem())
- int av_msgs,va_msgs; /* nur AV-Protokoll */
-
- /* Highbyte: Programmversionsnummer
- Lowbyte: unterstützte Nachrichtengruppen */
- int version; /* nur XAcc-Protokoll */
-
- /* ID des Menüeintrags im Accessory-Menü */
- int menu_id; /* nur XAcc-Protokoll */
-
- /* AV-Programmname (8 Zeichen) für appl_find */
- char name[]; /* nur AV-Protokoll */
-
- /* (erweiterter) XAcc2-Programmname oder NULL */
- char *xname; /* nur XAcc-Protokoll */
-
- /* Zeiger auf 'XDSC'-Informationen oder NULL */
- char *xdsc; /* nur XAcc-Protokoll */
- } XAcc;
-
- void XAccBroadCast(int msg[8])
- -> Nachrichtenpuffer 'msg' an alle erreichbaren Applikationen
- verschicken
-
- int XAccSendAck(int sendto, int answer)
- -> ACC_ACK-Rückmeldung 'answer' an Applikation 'sendto' senden
- (OK: answer!=0, Fehler: answer==0)
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
-
- int XAccSendKey(int sendto, int scan, int state)
- -> Tasten-Druck (Scancode 'scan', Status der Umschalttasten
- 'state') an Applikation 'sendto' senden
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
- FAIL: Timeout (keine Bestätigung des Empfängers)
-
- int XAccSendText(int sendto, char *txt)
- -> Zeichenkette 'txt' an Applikation 'sendto' senden
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
- FAIL: Timeout (keine Bestätigung des Empfängers)
-
- int XAccSendMeta(int sendto, int last, char *data, long len)
- -> Metafile-Block 'data' der Länge 'len' an Applikation 'sendto'
- senden (last!=0 -> letzter Datenblock)
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
- FAIL: Timeout (keine Bestätigung des Empfängers)
-
- int XAccSendImg(int sendto, int last, char *data, long len)
- -> GEM-Image-Block 'data' der Länge 'len' an Applikation 'sendto'
- senden (last!=0 -> letzter Datenblock)
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
- FAIL: Timeout (keine Bestätigung des Empfängers)
-
- int AvSendMsg(int sendto,int msg_id,int msg[8])
- -> (AV-) Nachricht 'msg_id' an Applikation 'sendto' senden
- (Message-Puffer msg[3]-msg[7] enthält gegebenenfalls weitere
- Daten)
- -> Rückgabewert:
- TRUE: Okay
- FALSE: Fehler
-
- XAcc *find_xacc_xdsc(int app_id,char *xdsc)
- -> erweiterten XAcc-Programmnamen der Applikation 'app_id' nach
- Zeichenkette 'xdsc' durchsuchen (app<0 -> alle XAcc-Appli-
- kationen durchsuchen)
- -> Rückgabewert enthält Zeiger auf XAcc-Struktur der
- Applikation, deren XAcc-Programmname die Zeichenkette ent-
- hält, oder NULL, wenn die Zeichenkette nicht gefunden wurde
-
- XAcc *find_id(int app_id)
- -> XAcc-Struktur der Applikation 'app_id' ermitteln oder NULL,
- wenn es sich um keine XAcc-Applikation handelt
-
- XAcc *find_app(int first)
- -> XAcc-Struktur der ersten (first!=0) oder der nächsten
- (first==0) angemeldeten Applikation ermitteln (Rückgabewert
- gleich NULL, wenn keine weitere Applikation gefunden wurde)
-
- int AppLoaded(char *name)
- -> Ermittelt die Applikations-ID der Anwendung mit dem
- Dateinamen 'name', welcher auch Pfad- und Laufwerksangaben
- enthalten darf.
- -> Rückgabewert: Applikations-ID oder negativer Wert
-
- 17. Drag & Drop-Funktionen
- ----------------------
-
- DRAG_DROP-Struktur:
- -------------------
-
- typedef struct
- {
- /* Art der Parameterübergabe */
- int dd_type;
-
- #define AV_DRAG 0 /* AV/Gemini-Drag&Drop */
- #define AV_START 1 /* VA_START-Nachricht */
- #define MINT_DRAG 2 /* MTOS-Drag&Drop */
-
- /* Applikations-ID des Senders */
- int dd_originator;
-
- /* Mausposition (oder negative Werte, falls nicht vom
- Benutzer verursacht bzw. Hintergrundfenster betroffen) */
- int dd_mx,dd_my;
-
- /* Status der Umschalttasten */
- int dd_kstate;
-
- /* Zeiger auf (Datei-) Namen oder NULL */
- char *dd_name;
-
- /* Zeiger auf Argumente (z.B. Kommandozeile) oder NULL. Die
- einzelnen Argumente/Dateinamen sind durch Leerzeichen ge-
- trennt, wobei Argumente, die Leerzeichen enthalten, inner-
- halb von Hochkommatas stehen (z.B. 'meine Datei'). Doppelte
- Hochkommatas stehen dann für ein einzelnes Hochkommata
- (z.B. 'Christian''s Datei') */
- char *dd_args;
-
- /* Zeiger auf übergebene Daten oder NULL (dieser Speicher-
- bereich darf NICHT zur weiteren Verwendung benutzt wer-
- den, d.h. wird wieder freigegeben!) */
- char *dd_mem;
-
- /* Länge der in 'dd_mem' übergebenen Daten oder Null */
- long dd_size;
-
- /* Extension der in 'dd_mem' übergebenen Daten oder Leer-
- string ""
- char dd_ext[4];
-
- /* Zeiger auf WIN-Struktur des Fensters, auf das die Daten
- gezogen wurden, oder NULL, falls Hintergrund bzw. nicht
- vom Benutzer verursacht */
- WIN *dd_win;
- } DRAG_DROP;
-
- WICHTIG:
- --------
- Per Drag&Drop können nur dann Daten empfangen werden, wenn mit
- Hilfe der Funktion Event_Handler() ein Ereignis-Handler angemeldet
- wurde, der die Drag&Drop-Nachricht 'OBJC_DRAGGED' auswertet.
-
- void SetDragDrop(int any_extension,char *exts)
- -> gewünschte/bevorzugte Dateierweiterungen für das Drag&Drop-
- Protokoll festlegen. Dabei zeigt 'exts' auf eine Zeichen-
- kette mit DD_EXTSIZE Zeichen (mit Nullbytes auffüllen), die
- die gewünschten Erweiterungen (z.B. ".TXT.ASC.ARGS") ent-
- hält, wobei die Erweiterungen jeweils 4 Zeichen umfassen
- müssen und 'ARGS' für Argumente steht. Wird für den
- Parameter 'any_extension' TRUE übergeben, so wird jede
- Erweiterung akzeptiert. (voreingestellt ist, daß nur Argu-
- mente entgegengenommen werden.)
-
- int SendDragDrop(int msx,int msy,int kstate,char *name,
- char *ext,long size,char *data)
- -> Daten per Drag&Drop-Protokoll an die Applikation senden,
- der das Fenster unter dem Mauszeiger gehört
- -> Parameter:
- msx,msy: Mauskoordinaten
- kstate: Status der Umschalttasten
- name: Zeiger auf (Datei-) Namen der Daten oder NULL
- ext[4]: Zeiger auf Zeichenkette, die die Erweiterung
- bzw. den Typ der Daten enthält
- size: Länge der Daten
- data: Adresse der Daten
- -> Rückgabewert:
- NO_RECEIVER: Fenster oder Empfänger nicht gefunden bzw.
- applikationseigenes Fenster
- NO_DD: Drag&Drop-Pipe konnte nicht angelegt werden
- (Betriebssystem unterstützt kein Drag&Drop!)
- DD_NAK: Empfänger unterstützt kein Drag&Drop
- DD_EXT: Empfänger kann Daten nicht empfangen (z.B.
- unbekanntes Format)
- DD_LEN: Nicht alle Daten konnten übermittelt werden
- oder zuwenig Speicher
- DD_OK: Alles in Ordnung
-
- 18. Auskunftsfunktionen
- -------------------
-
- int appl_xgetinfo(int type,int *out1,int *out2,int *out3,int *out4);
- -> erweiterte appl_getinfo()-Routine, welche die Existenz von
- appl_getinfo() selbständig ermittelt
- -> Rückgabewerte wie bei appl_getinfo()
-
- int appl_getfontinfo(int font_type,int *height,int *id,int *type)
- -> Informationen über großen (font_type=0) oder kleinen
- System-Font (font_type=1) ermitteln
- -> Rückgabewerte:
- height: Font-Höhe in Punkt
- id: Font-ID
- type: 0 - System-Font
- 1 - FSM-Font
-
- int wind_xget(int w_handle, int w_field, int *w1, int *w2,
- int *w3,int *w4);
- -> korrigierte wind_get()-Funktion für erweiterte Aufrufe unter
- Winx sowie MTOS und zukünftigen Erweiterungen (die in der
- Pure C-GEM-Library bis V1.1 enthaltene, optimierte Routine
- funktioniert nicht mit neueren Aufrufen)
-
- int get_dialog_info(int *fly_dials,int *win_dials,int *wins,
- DIAINFO **top);
- -> Informationen über geöffnete Dialoge und Fenster ermitteln
- -> Rückgabewert: TRUE: Ausgabe in beliebiges Fenster möglich
- FALSE: Ausgabe nur in obersten Dialog 'top'
- FAIL: Keine Ausgabe möglich (z.B. Drop-Down-
- Menü heruntergeklappt oder Popup ge-
- öffnet)
- *fly_dials: Anzahl der geöffneten (fliegenden) Dialoge
- (sofern fly_dials!=NULL)
- *win_dials: Anzahl der geöffneten Fenster-Dialoge (sofern
- win_dials!=NULL)
- *wins: Anzahl der geöffneten Fenster (sofern wins!=NULL)
- inklusive der Fensterdialoge
- *top: Zeiger auf obersten Dialog, falls Rückgabewert
- gleich FALSE (sofern top!=NULL)
-
- 19. Datei-/Pfadfunktionen
- ---------------------
-
- void drive_changed(int drive)
- -> Inhalt des Laufwerks 'drive' (0=A,1=B,2=C,...,-1=alle Lauf-
- werke) wurde verändert (SH_WDRAW-Nachricht wird (per
- XAccBroadCast) an alle Applikationen gesendet)
-
- char *GetFilename(char *path)
- -> Zeiger auf Dateiname des Pfades 'path' ermitteln. Enthält
- der Pfad keinen Dateinamen, so zeigt der Rückgabewert auf
- das Ende (Nullbyte) des Pfades
-
- char *GetExtension(char *path)
- -> Zeiger auf Erweiterungs des Dateinamens des Pfades 'path'
- ermitteln. Enthält der Pfad keinen Dateinamen oder keine
- Erweiterung, so zeigt der Rückgabewert auf das Ende
- (Nullbyte) des Pfades
-
- char *GetPath(char *path)
- -> Dateiname des Pfades 'path' wird entfernt und ein Zeiger
- auf das Ende des Pfades (Nullbyte) zurückgegeben
-
- int GetDrive(char *path)
- -> Laufwerk des Pfades 'path' ermitteln
- -> Rückgabewert: 0=A,1=B,2=C,...
-
- void MakeFullpath(char *dest,char *path,char *file)
- -> kompletten Pfadnamen aus Pfad 'path' (sofern path!=NULL,
- wobei der Pfad keinen abschließenden Backslash enthalten
- muß) und Datei 'file' erstellen und im String 'dest' zurück-
- geben. Wird für den Pfad 'path' NULL übergeben, so muß
- sich der Pfad bereits in 'dest' befinden!
-
- int FileSelect(char *title,char *path,char *fname,char *sel,
- int no_insel)
- -> Dateiselector aufrufen, wobei diese Funktion automatisch
- erkennt, ob ein erweiterter Fileselector vorliegt.
- -> Parameter:
- title: Titel des Fileselectors
- path: Pfad (sowohl Ein- als auch Ausgabeparameter)
- fname: vorgegebene Datei (Eingabe) bzw. ausgewählte Datei
- (Ausgabe)
- sel: Dateimaske oder NULL (in diesem Fall wird "*.*"
- genommen)
- no_insel: keine vorgegebene Datei (no_insel!=0)
- -> Rückgabewert:
- TRUE: Datei wurde ausgewählt
- FALSE: Keine Datei ausgewählt oder Fehler aufgetreten
-
- 20. Verschiedene Funktionen
- -----------------------
-
- void MouseOn(void);
- void MouseOff(void);
- -> Mauszeiger an/-ausschalten. Diese Funktionen merken sich
- intern, ob der Mauszeiger bereits an- oder ausgeschaltet
- ist.
-
- void MouseArrow(void);
- void MouseCursor(void);
- void MouseBee(void);
- void MouseHourGlass(void);
- void MousePointHand(void);
- void MouseFlatHand(void);
- void MouseThinCross(void);
- void MouseThickCross(void);
- void MouseOutlineCross(void);
- -> Mausform einstellen
-
- int sl_key(int scan,int ascii)
- -> Aus Scan-Code 'scan' und ASCII-Code 'ascii' Tastencode
- für SLKEY-Struktur berechnen (bisher reines Ersetzungs-
- Makro)
-
- int scan_2_ascii(int scan,int state);
- -> Großbuchstabe eines Tastendrucks aus Scan-Code 'scan' und
- Status der Umschalttasten 'state' ermitteln
-
- int min(int val1,int val2);
- -> Minimum der Werte 'val1' und 'val2' berechnen und zurück-
- geben
-
- int max(int val1,int val2);
- -> Maximum der Werte 'val1' und 'val2' berechnen und zurück-
- geben
-
- void Min(int *var,int val);
- -> Minimum von der Variablen '*var' und dem Wert 'val'
- berechnen und in der Variablen '*var' speichern
-
- void Max(int *var,int val);
- -> Maximum von der Variablen '*var' und dem Wert 'val'
- berechnen und in der Variablen '*var' speichern
-
- void mfdb(MFDB *mfdb,int *bitmap,int width,int height,
- int standard,int planes)
- -> Memory form definition block 'mfdb' initialisieren
- -> bitmap: Zeiger auf Start der Bitmap
- width,height: Breite/Höhe der Bitmap in Pixeln
- standard: Standardformat (1) oder geräteabhängiges
- Format
- planes: Anzahl der Farbebenen der Bitmap
-
- long mfdb_size(MFDB *mfdb);
- -> Speicherbedarf der Bitmap des Memory form definition
- block 'mfdb' berechnen
-
- char LowerChar(char ch)
- char UpperChar(char ch)
- -> Zeichen 'ch' in Klein-/Großbuchstaben umwandeln, wobei
- auch Umlaute beachtet werden
-
- void *GetMsgBuffer(long size)
- -> globalen Speicher (u.a. für XAcc-2/AV-Kommunikation) der
- Größe 'size' anfordern
- -> Rückgabewert wie bei Malloc()
-
- 21. Definitionen häufig benötigter (Protokoll-) Konstanten
- ------------------------------------------------------
-
- XAcc-2-Protokoll:
- -----------------
- (genaue Bedeutung s. XAcc-2-Dokumentation)
-
- #define ACC_ID 0x400
- #define ACC_OPEN 0x401
- #define ACC_CLOSE 0x402
- #define ACC_ACC 0x403
- #define ACC_EXIT 0x404
-
- #define ACC_ACK 0x500
- #define ACC_TEXT 0x501
- #define ACC_KEY 0x502
- #define ACC_META 0x503
- #define ACC_IMG 0x504
-
- AV-Protokoll:
- -------------
- (genaue Bedeutung s. AV-Dokumentation 'VA_PROTO.H')
-
- #define AV_PROTOKOLL 0x4700
- #define AV_GETSTATUS 0x4703
- #define AV_STATUS 0x4704
- #define AV_SENDKEY 0x4710
- #define AV_ASKFILEFONT 0x4712
- #define AV_ASKCONFONT 0x4714
- #define AV_ASKOBJECT 0x4716
- #define AV_OPENCONSOLE 0x4718
- #define AV_OPENWIND 0x4720
- #define AV_STARTPROG 0x4722
- #define AV_ACCWINDOPEN 0x4724
- #define AV_ACCWINDCLOSED 0x4726
- #define AV_COPY_DRAGGED 0x4728
- #define AV_PATH_UPDATE 0x4730
- #define AV_WHAT_IZIT 0x4732
- #define AV_DRAG_ON_WINDOW 0x4734
- #define AV_EXIT 0x4736
-
- #define VA_PROTOSTATUS 0x4701
- #define VA_SETSTATUS 0x4705
- #define VA_START 0x4711
- #define VA_FILEFONT 0x4713
- #define VA_CONFONT 0x4715
- #define VA_OBJECT 0x4717
- #define VA_CONSOLEOPEN 0x4719
- #define VA_WINDOPEN 0x4721
- #define VA_PROGSTART 0x4723
- #define VA_DRAGACCWIND 0x4725
- #define VA_COPY_COMPLETE 0x4729
- #define VA_THAT_IZIT 0x4733
- #define VA_DRAG_COMPLETE 0x4735
-
- #define VA_OB_UNKNOWN 0
- #define VA_OB_TRASHCAN 1
- #define VA_OB_SHREDDER 2
- #define VA_OB_CLIPBOARD 3
- #define VA_OB_FILE 4
- #define VA_OB_FOLDER 5
- #define VA_OB_DRIVE 6
- #define VA_OB_WINDOW 7
-
- MTOS-Drag&Drop-Protokoll:
- -------------------------
- (genaue Bedeutung s. MTOS-Entwickler-Dokumentation)
-
- #define AP_DRAGDROP 63
-
- #define DD_OK 0
- #define DD_NAK 1
- #define DD_EXT 2
- #define DD_LEN 3
- #define DD_TRASH 4
- #define DD_PRINTER 5
- #define DD_CLIPBOARD 6
-
- #define DD_TIMEOUT 4000
-
- #define DD_NUMEXTS 8
- #define DD_EXTSIZE 32L
- #define DD_NAMEMAX 128
-
- #define DD_HDRMAX (8+DD_NAMEMAX)
-
- Menü-Protokoll:
- ---------------
-
- #define WM_CLOSED 0x0016 ^U
- #define WM_FULLED 0x0017 ^#* ('*' auf Ziffernblock)
- #define WM_SAVE 0x1000 ^S
- #define WM_SAVEAS 0x1001 ^M
- #define WM_PRINT 0x1002 ^P
- #define WM_UNDO 0x1003 Undo
- #define WM_CUT 0x1004 ^X
- #define WM_COPY 0x1005 ^C
- #define WM_PASTE 0x1006 ^V
- #define WM_SELECTALL 0x1007 ^A
- #define WM_FIND 0x1008 ^F
- #define WM_REPLACE 0x1009 ^R
- #define WM_FINDNEXT 0x100a ^G
- #define WM_HELP 0x100b Help
- #define WM_DELETE 0x100c Delete
-
- View-Protokoll:
- ---------------
- (genaue Bedeutung s. View-Dokumentation V1.04)
-
- #define VIEW_FILE 0x5600
- #define VIEW_FAILED 0x5601
- #define VIEW_OPEN 0x5602
- #define VIEW_CLOSED 0x5603
- #define VIEW_DATA 0x5604
- #define VIEW_GETMFDB 0x5610
- #define VIEW_SETMFDB 0x5611
- #define VIEW_MFDB 0x5612
-
- #define VIEWERR_ERROR 0
- #define VIEWERR_SIZE 1
- #define VIEWERR_COLOR 2
- #define VIEWERR_WID 3
- #define VIEWERR_MEM 4
-
- Clipboard-Protokoll:
- --------------------
- (s.a. Beschreibung der Funktion scrp_changed())
-
- Aufbau der Nachricht:
- msg[0] = SC_CHANGED (80)
- msg[1] = apID
- msg[2] = 0
- msg[3] = Bitmap des Dateiformats
- (Parameter 'format' von scrp_changed())
- msg[4],msg[5] = 4 Zeichen für die "beste" der abgespeicherten
- Dateien (z.B. ".RTF"), damit beim Lesen mög-
- lichst wenig Information verloren geht
- (Parameter 'best_ext' von scrp_changed())
- msg[6],msg[7] = reserviert (auf Null setzen!)
-
-
- Scan-Codes:
- -----------
-
- #define SCANESC 1 /* Esc */
- #define SCANTAB 15 /* Tab */
- #define SCANRET 28 /* Return */
- #define SCANDEL 83 /* Delete */
- #define SCANBS 14 /* Backspace */
- #define SCANENTER 114 /* Enter */
-
- #define SCANHELP 98 /* Help */
- #define SCANUNDO 97 /* Undo */
- #define SCANINS 82 /* Insert */
- #define SCANHOME 71 /* Clr/Home */
-
- #define SCANUP 72 /* Up */
- #define SCANDOWN 80 /* Down */
-
- #define SCANLEFT 75 /* Left */
- #define SCANRIGHT 77 /* Right */
-
- #define CTRLLEFT 115 /* Ctrl-Left */
- #define CTRLRIGHT 116 /* Ctrl-Right */
-
- #define SCANF1 59 /* F1 - F10 */
- ...
- #define SCANF10 68
-
- #define CTRLF1 84 /* CTRL-F1 - CTRL-F10 */
- ...
- #define CTRLF10 93
-